Spark DF pivot error: Method pivot([class java.lang.String, class java.lang.String]) does not exist
Spark DF pivot error: Method pivot([class java.lang.String, class java.lang.String]) does not exist
我是使用 Spark 数据帧的新手。我正在尝试将 pivot
方法与 Spark(Spark 版本 2.x)和 运行 一起使用,出现以下错误:
Py4JError: An error occurred while calling o387.pivot. Trace:
py4j.Py4JException: Method pivot([class java.lang.String, class java.lang.String]) does not exist
虽然我这里有 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|
我正在尝试的方式:
df = df.groupBy(["name","date"]).pivot(pivot_col="time",values="value").agg(first("value")).show
我这里的错误是什么?
问题是 pivot
函数中的 values="value"
参数。这应该用于实际值的列表,而不是列名。来自 documentation:
values – List of values that will be translated to columns in the output 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"))
我是使用 Spark 数据帧的新手。我正在尝试将 pivot
方法与 Spark(Spark 版本 2.x)和 运行 一起使用,出现以下错误:
Py4JError: An error occurred while calling o387.pivot. Trace: py4j.Py4JException: Method pivot([class java.lang.String, class java.lang.String]) does not exist
虽然我这里有 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|
我正在尝试的方式:
df = df.groupBy(["name","date"]).pivot(pivot_col="time",values="value").agg(first("value")).show
我这里的错误是什么?
问题是 pivot
函数中的 values="value"
参数。这应该用于实际值的列表,而不是列名。来自 documentation:
values – List of values that will be translated to columns in the output 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"))