我有一个包含两个字符串列(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 |
## +---------+---------------+
在这个例子中,输出保留了插入元素的顺序,但是这个前提总是如此吗?或者无法保证元素按顺序连接?即,不同的执行可能导致元素列表中的不同序列。 如果后者是真的,我怎么能一直保留订单?我是否需要一个带有排序索引的新列?
谢谢!