Apache spark Pypark中的Spark枢轴串

Apache spark Pypark中的Spark枢轴串,apache-spark,pivot,pyspark,Apache Spark,Pivot,Pyspark,我在使用Spark重组数据时遇到问题。原始数据如下所示: df = sqlContext.createDataFrame([ ("ID_1", "VAR_1", "Butter"), ("ID_1", "VAR_2", "Toast"), ("ID_1", "VAR_3", "Ham"), ("ID_2", "VAR_1", "Jam"), ("ID_2", "VAR_2", "Toast"), ("ID_2", "VAR_3", "Egg"),

我在使用Spark重组数据时遇到问题。原始数据如下所示:

df = sqlContext.createDataFrame([
    ("ID_1", "VAR_1", "Butter"),
    ("ID_1", "VAR_2", "Toast"),
    ("ID_1", "VAR_3", "Ham"),
    ("ID_2", "VAR_1", "Jam"),
    ("ID_2", "VAR_2", "Toast"),
    ("ID_2", "VAR_3", "Egg"),
], ["ID", "VAR", "VAL"])

>>> df.show()
+----+-----+------+
|  ID|  VAR|   VAL|
+----+-----+------+
|ID_1|VAR_1|Butter|
|ID_1|VAR_2| Toast|
|ID_1|VAR_3|   Ham|
|ID_2|VAR_1|   Jam|
|ID_2|VAR_2| Toast|
|ID_2|VAR_3|   Egg|
+----+-----+------+
这就是我试图实现的结构:

+----+------+-----+-----+
|  ID| VAR_1|VAR_2|VAR_3|
+----+------+-----+-----+
|ID_1|Butter|Toast|  Ham|
|ID_2|   Jam|Toast|  Egg|
+----+------+-----+-----+
我的想法是使用:

df.groupBy("ID").pivot("VAR").show()
但我得到了以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'GroupedData' object has no attribute 'show'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“GroupedData”对象没有属性“show”

任何建议!谢谢

您需要在pivot()之后添加聚合。如果您确定每个(“ID”、“VAR”)对只有一个“VAL”,则可以使用first()

从pyspark.sql导入函数为f
结果=df.groupBy(“ID”).pivot(“VAR”).agg(f.first(“VAL”))
result.show()
+----+------+-----+-----+
|ID | VAR_1 | VAR_2 | VAR_3|
+----+------+-----+-----+
|ID|U 1 |黄油|吐司|火腿|
|ID|2 |果酱|吐司|鸡蛋|
+----+------+-----+-----+

因为第一个是一个“动作”,所以可以让它运行得很慢。另一种可能的解决方案可能是:
df.groupBy(“ID”).pivot(“VAR”).agg(concat_-ws(“”,collect_-list(col(“VAL”)))
。这应该运行得更快。@LucasMendesMotaDaFonseca,first在这个场景中不是一个动作,只有在直接用于RDD或DF时才是。