数据:
1,Coke
1,Beans
1,paper
2,Beans
2,Pen
2,Sheets
2,Banana
预期输出:
+---+------------------------+
| 1|Coke,Beans,Paper |
| 2|Beans,Pen,Sheets,Banana |
+---+------------------------+
我能够通过编写SQL查询来实现这一目的。
val df = sparkSession.read.csv("file_location")
df.registerTempTable("data")
val result = sparkSession
.sql("select _c0 ,concat_ws(',', collect_list(_c1)) as product from data group by _c0")
result.show
请使用dataframe/Dataset
函数(select,groupby,agg等)帮助我实现相同的结果。
答案 0 :(得分:1)
这很简单,你有答案,但我希望我不只是做一些研究生的作业。 DataFrame
类似于 SQL 表,因此您可以使用其方法进行查询。
import org.apache.spark.sql.functions._
val df = sc.parallelize(List(
(1, "Coke"),
(1, "Beans"),
(1,"paper"),
(2,"Beans"),
(2,"Pen"),
(2,"Sheets"),
(2,"Banana")
)).toDF("id", "product_name")
df.groupBy("id").agg(concat_ws(",", collect_list("product_name")).as("product_list")).show()
输出结果为:
+---+-----------------------+
|id |product_list |
+---+-----------------------+
|1 |Coke,Beans,paper |
|2 |Beans,Pen,Sheets,Banana|
+---+-----------------------+