我正在使用pyspark。所以我有一个火花数据框,看起来像:
a | b | c
5 | 2 | 1
5 | 4 | 3
2 | 4 | 2
2 | 3 | 7
需要输出:
a | b_list
5 | 2,1,4,3
2 | 4,2,3,7
保持输出中给出的序列非常重要。
答案 0 :(得分:2)
除了udf之外,我们还可以按照上面的注释中的建议使用concat_ws
函数,例如:
import pyspark.sql.functions as F
df = (df
.withColumn('lst', F.concat(df['b'], F.lit(','), df['c']).alias('lst'))
.groupBy('a')
.agg( F.concat_ws(',', F.collect_list('lst').alias('b_list')).alias('lst')))
df.show()
+---+-------+
| a| lst|
+---+-------+
| 5|2,1,4,3|
| 2|4,2,3,7|
+---+-------+
答案 1 :(得分:1)
以下结果将最后2列聚合到数组列中:
df1 = df.withColumn('lst', f.concat(df['b'], f.lit(','), df['c']).alias('lst'))\
.groupBy('a')\
.agg( f.collect_list('lst').alias('b_list'))
现在加入数组元素:
#Simplistic udf to joing array:
def join_array(col):
return ','.join(col)
join = f.udf(join_array)
df1.select('a', join(df1['b_list']).alias('b_list'))\
.show()
印刷:
+---+-------+
| a| b_list|
+---+-------+
| 5|2,1,4,3|
| 2|4,2,3,7|
+---+-------+