相关疑难解决方法(0)

在Spark SQL中的一个查询中使用多个collect_list

我有以下数据帧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)

我的问题是,不productrating在聚集阵列相互匹配?也就是说,同一行productrating来自同一行的聚合数组中是否具有相同的索引.

更新:从Spark 2.0.0开始,可以collect_list对struct类型执行,因此我们可以collect_list在组合列上执行一个.但是对于2.0.0之前的版本,人们只能使用collect_list原始类型.

hive scala apache-spark apache-spark-sql

7
推荐指数
1
解决办法
5355
查看次数

Spark Group通过agg 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)

group-by aggregate spark-dataframe

7
推荐指数
1
解决办法
4184
查看次数