目录

  • 题目
  • 实验结果
  • 利用Spark 转换操作算子查询
  • 保存的Json文件载入到DataFrame
  • 查询单价小于0.2的所有商品
  • 查询订单551845~551850的顾客
  • 统计本数据中包含了多少个订单
  • 统计所有订单的最大金额
  • 订单包含的最多产品数量
  • 订单包含的最多产品种类
  • 利用DataFrame的SQL语句实现查询
  • 保存的文件Json载入到DataFrame
  • 查询单价小于0.2的所有商品
  • 查询订单551845~551850的顾客
  • 统计本数据中包含了多少个订单
  • 统计所有订单的最大金额
  • 订单包含的最多产品数量
  • 订单包含的最多产品种类
  • 关于Spark转换操作算子参考资料


题目

  1. 进入spark-shell
  2. 保存的Json文件载入到DataFrame
  3. 执行DataFrame中的查询(以下查询分别用转换操作算子和SQL语句实现),并用show命令打印出摘要信息
    ① 查询单价小于0.2的所有商品
    ② 查询订单551845~551850的顾客
    ③ 统计本数据中包含了多少个订单
    ④ 统计所有订单的最大金额、订单包含的最多产品数量、订单包含的最多产品种类

实验结果

利用Spark 转换操作算子查询

保存的Json文件载入到DataFrame

路径:“file:///root/sql_out/out.json” 是自己的

var df = spark.read.format("json").load("file:///root/sql_out/out.json")

dataframe python 条件行操作 dataframe 条件查询_scala

查询单价小于0.2的所有商品

df.select("Description","UnitPrice").where("UnitPrice<0.2 and UnitPrice>0").show

dataframe python 条件行操作 dataframe 条件查询_json_02

查询订单551845~551850的顾客

df.select("CustomerID","InvoiceNo").where("InvoiceNo>=551845 and InvoiceNo <=551850").show

dataframe python 条件行操作 dataframe 条件查询_json_03

统计本数据中包含了多少个订单

val sum = df.select("InvoiceNo").groupBy("InvoiceNo").count()
sum.describe("count").show

dataframe python 条件行操作 dataframe 条件查询_scala_04

统计所有订单的最大金额

val res1 = df.select("InvoiceNo","UnitPrice","Quantity").withColumn("sum",col("UnitPrice")*col("Quantity"))
res1.groupBy("InvoiceNo").sum("sum").orderBy(desc("sum(sum)")).show

dataframe python 条件行操作 dataframe 条件查询_sql_05

订单包含的最多产品数量

val res2 = df.select("InvoiceNo","Quantity").groupBy("InvoiceNo").sum("Quantity")
res2.orderBy(desc("sum(Quantity)")).show

dataframe python 条件行操作 dataframe 条件查询_spark_06

订单包含的最多产品种类

df.select("InvoiceNo","Description").distinct().groupBy("InvoiceNo").count().orderBy(desc("count")).show

dataframe python 条件行操作 dataframe 条件查询_sql_07

利用DataFrame的SQL语句实现查询

保存的文件Json载入到DataFrame

var df = spark.read.format("json").load("file:///root/sql_out/out.json")
df.createTempView("A")

查询单价小于0.2的所有商品

df.sqlContext.sql("select Description,UnitPrice from A where UnitPrice<0.2 and UnitPrice>0").show

查询订单551845~551850的顾客

df.sqlContext.sql("select CustomerID,InvoiceNo from A where InvoiceNo>=551845 and InvoiceNo <=551850").show

统计本数据中包含了多少个订单

df.sqlContext.sql("select count(*) from (select InvoiceNo,count(*) from A group by InvoiceNo) t").show

统计所有订单的最大金额

df.sqlContext.sql("select InvoiceNo, sum(UnitPrice*Quantity) as sum from A group by InvoiceNo order by sum desc").show

订单包含的最多产品数量

df.sqlContext.sql("select InvoiceNo, sum(Quantity) as count from A group by InvoiceNo order by count desc").show

订单包含的最多产品种类

df.sqlContext.sql("select InvoiceNo, count(distinct Description) as type from A group by InvoiceNo order by type desc").show