11.使用Spark SQL统计出每一个省份广告被点击次数的 TOP3,并简要说明原理。 数据在access.log文件中,数据结构:时间戳,省份,城市,用户,广告 字段使用空格分割。 样本如下: 1516609143867 6 7 64 16 1516609143869 9 4 75 18 1516609143869 1 7 87 12
时间: 2024-03-24 07:39:30 浏览: 134
可以通过使用Spark SQL的方式来统计每一个省份广告被点击次数的 TOP3,具体实现步骤如下:
1. 首先读取access.log文件,将每一行数据转化为DataFrame。
```scala
val accessDF = spark.read.textFile("access.log")
.map(line => {
val fields = line.split(" ")
(fields(1), fields(4))
}).toDF("province", "ad")
```
2. 将DataFrame注册为临时表,然后使用SQL语句进行统计操作。
```scala
accessDF.createOrReplaceTempView("access")
val result = spark.sql(
"SELECT province, ad, count(*) AS cnt FROM access GROUP BY province, ad"
)
```
3. 对每一个省份的广告点击次数进行排序,取TOP3。
```scala
import org.apache.spark.sql.functions._
val windowSpec = Window.partitionBy("province").orderBy(desc("cnt"))
val top3 = result.withColumn("rn", row_number().over(windowSpec))
.where($"rn" <= 3)
```
最后,将统计结果输出到文件或其他外部系统中即可。原理是通过Spark SQL将原始数据转化为DataFrame,然后使用SQL语句进行分组统计,最后使用窗口函数对每一个省份的广告点击次数进行排序,取TOP3。
阅读全文