SPARK SQL list_collect保留订单

时间:2016-05-24 10:10:30

标签: apache-spark hive apache-spark-sql

我有一个包含两个字符串列(type,element)的表,对于每个类型,我想在一行上连接所有元素

我可以通过collect_list函数来实现这个目的:

val df = sc.parallelize(Seq(
  ("0", "p0"),
  ("0", "p2"),
  ("1", "p0"),
  ("1", "p8")
)).toDF("type", "element")

df.groupBy($"type")
  .agg(concat_ws(",", collect_list($"element")).alias("elements")).show

## +---------+---------------+
## | type    |       elements|
## +---------+---------------+
## |0        |p0,p2          |
## |1        |p0,p8          |
## +---------+---------------+

在这个例子中,输出保留了插入元素的顺序,但是这个前提总是如此吗?或者无法保证元素按顺序连接?即,不同的执行可能导致元素列表中的不同序列。 如果后者是真的,我怎么能一直保留订单?我是否需要一个带有排序索引的新列?

谢谢!

0 个答案:

没有答案