我有以下数据帧data
:
root
|-- userId: string
|-- product: string
|-- rating: double
Run Code Online (Sandbox Code Playgroud)
以及以下查询:
val result = sqlContext.sql("select userId, collect_list(product), collect_list(rating) from data group by userId")
Run Code Online (Sandbox Code Playgroud)
我的问题是,不product
和rating
在聚集阵列相互匹配?也就是说,同一行product
和rating
来自同一行的聚合数组中是否具有相同的索引.
更新:从Spark 2.0.0开始,可以collect_list
对struct类型执行,因此我们可以collect_list
在组合列上执行一个.但是对于2.0.0之前的版本,人们只能使用collect_list
原始类型.
我有一个与此类似的问题,但由collect_list操作的列数由名称列表给出。例如:
scala> w.show
+---+-----+----+-----+
|iid|event|date|place|
+---+-----+----+-----+
| A| D1| T0| P1|
| A| D0| T1| P2|
| B| Y1| T0| P3|
| B| Y2| T2| P3|
| C| H1| T0| P5|
| C| H0| T9| P5|
| B| Y0| T1| P2|
| B| H1| T3| P6|
| D| H1| T2| P4|
+---+-----+----+-----+
scala> val combList = List("event", "date", "place")
combList: List[String] = List(event, date, place)
scala> val v = w.groupBy("iid").agg(collect_list(combList(0)), collect_list(combList(1)), collect_list(combList(2)))
v: org.apache.spark.sql.DataFrame = [iid: string, collect_list(event): …
Run Code Online (Sandbox Code Playgroud)