我有一个pyspark数据框,其中包含表格的键和值列表:
k1,v1
k2,v2
k3,v3
我想创建:
k1,[v1,v2,v3]
k2,[v1,v2,v3]
k3,[v1,v2,v3]
因为我发现k1 = k2 = k3。我知道这将涉及collect_list(),但我仍然不确定如何获得所需的输出。
任何帮助都会很棒!
答案 0 :(得分:0)
您可以执行以下操作
{{1}}
答案 1 :(得分:0)
您可以尝试此操作,收集列表将收集与foreach($lang as $myrow) {
fputcsv($output, $myrow);
}
,k1
对应的所有值,以确定值是否可以重复多次。
以下是我们如何做到这一点: - 从pyspark.sql导入函数为F
k2
如果您需要删除重复: -
n = sqlContext.createDataFrame([
["k1", "v1"],
["k1", "v2"],
["k1", "v3"],
["k1", "v1"],
["k2", "v1"],
["k2", "v2"],
["k2", "v3"],
["k2", "v1"],
], ["col1", "col2"])
n.show()
+----+----+
|col1|col2|
+----+----+
| k1| v1|
| k1| v2|
| k1| v3|
| k1| v1|
| k2| v1|
| k2| v2|
| k2| v3|
| k2| v1|
+----+----+
n.groupby("col1").agg(F.collect_list("col2")).show()
+----+------------------+
|col1|collect_list(col2)|
+----+------------------+
| k1| [v1, v2, v3, v1]|
| k2| [v1, v2, v3, v1]|
+----+------------------+
答案 2 :(得分:0)
使用@Rakesh数据框n
,可以通过汇总和收集来创建数据框m
:
m = n.groupby("col1").agg(F.collect_set("col2").cast('string').alias('set'))
m.show()
输出:
+----+----------+
|col1| set|
+----+----------+
| k2|[v2,v3,v1]|
| k1|[v2,v3,v1]|
+----+----------+
并连接它们:
m.select(F.concat(m.col1, F.lit(','), m.set).alias('concatenated')).show()
输出:
+-------------+
| concatenated|
+-------------+
|k2,[v2,v3,v1]|
|k1,[v2,v3,v1]|
+-------------+