我有一个包含两个字符串列(type,element)的表,对于每个类型,我希望将所有元素连接到一行上。
我可以通过collect\u 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 |
## +---------+---------------+
在这个例子中,输出保留了元素插入的顺序,但是,这个前提总是正确的吗?或者不能保证元素按顺序连接?i、 不同的执行可能导致元素列表中的顺序不同。如果后者是真的,我怎么能一直维持秩序?我需要一个带排序索引的新列吗?
谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!