Spark DF枢轴错误:方法pivot([class java.lang.String,class java.lang.String])不存在

时间:2019-04-03 23:55:09

标签: python apache-spark pyspark apache-spark-sql pyspark-sql

我是使用Spark数据帧的新手。我正在尝试将extends Node2D var text = PrintText() func PrintText(): return("Print Text Once") func _ready(): pass func _input(event): if event.is_action_pressed("ui_left"): print(text) 方法与Spark(Spark版本2.x)一起使用,并遇到以下错误:

  

Py4JError:调用o387.pivot时发生错误。跟踪:   py4j.Py4JException:方法ivot([class java.lang.String,class java.lang.String])不存在

即使我在此处将pivot的功能设为agg,我实际上也不需要应用任何聚合。

我的数据框如下:

first

预期:

+-----+-----+----------+-----+
| name|value|      date| time|
+-----+-----+----------+-----+
|name1|100.0|2017-12-01|00:00|
|name1|255.5|2017-12-01|00:15|
|name1|333.3|2017-12-01|00:30|

我正在尝试的方式:

+-----+----------+-----+-----+-----+
| name|      date|00:00|00:15|00:30|
+-----+----------+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3|

我这里的错误是什么?

1 个答案:

答案 0 :(得分:2)

问题是values="value"函数中的pivot参数。这应该用于列出要使用的实际值列表,而不是列名。来自documentation

  

values –值列表,这些值将转换为输出DataFrame中的列。

和一个示例:

df4.groupBy("year").pivot("course", ["dotNET", "Java"]).sum("earnings").collect()
[Row(year=2012, dotNET=15000, Java=20000), Row(year=2013, dotNET=48000, Java=30000)]

对于问题values中的示例,应将其设置为["00:00","00:15", "00:30"]。但是,values参数通常不是必需的(但它将使数据透视更有效),因此您可以简单地更改为:

df = df.groupBy(["name","date"]).pivot("time").agg(first("value"))