我有一些模拟以下结构的数据:
rdd = sc.parallelize(
[
(0,1),
(0,5),
(0,3),
(1,2),
(1,3),
(2,6)
]
)
df_data = sqlContext.createDataFrame(rdd, ["group","value"])
df_data.show()
+-----+-----+
|group|value|
+-----+-----+
| 0| 1|
| 0| 5|
| 0| 3|
| 1| 2|
| 1| 3|
| 2| 6|
+-----+-----+
我想要做的是按组透视此数据,以显示'value‘值的存在,如下所示:
+-----+-------+-------+-------+-------+-------+
|group|value_1|value_2|value_3|value_5|value_6|
+-----+-------+-------+-------+-------+-------+
| 0| true| false| true| true| false|
| 1| false| true| true| false| false|
| 2| false| false| false| false| true|
+-----+-------+-------+-------+-------+-------+
有没有什么办法可以用PySpark实现这一点?
我尝试了groupby/pivot/agg的组合,但没有成功。
发布于 2018-06-08 04:34:56
这里有一种方法:
import pyspark.sql.functions as F
(df_data.withColumn('value', F.concat(F.lit('value_'), df_data.value))
.groupBy('group').pivot('value').agg(F.count('*').isNotNull())
.na.fill(False).show())
+-----+-------+-------+-------+-------+-------+
|group|value_1|value_2|value_3|value_5|value_6|
+-----+-------+-------+-------+-------+-------+
| 0| true| false| true| true| false|
| 1| false| true| true| false| false|
| 2| false| false| false| false| true|
+-----+-------+-------+-------+-------+-------+
https://stackoverflow.com/questions/50749596
复制相似问题