Ошибка сводки Spark DF: сводка метода ([класс java.lang.String, класс java.lang.String]) не существует - PullRequest
2 голосов
/ 04 апреля 2019

Я новичок в использовании фреймов данных Spark. Я пытаюсь использовать метод pivot со Spark (Spark версии 2.x) и сталкиваюсь со следующей ошибкой:

Py4JError: Произошла ошибка при вызове o387.pivot. Трассировка: py4j.Py4JException: метод pivot ([класс java.lang.String, класс java.lang.String]) не существует

Несмотря на то, что здесь у меня есть функция 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

В чем здесь моя ошибка?

1 Ответ

2 голосов
/ 04 апреля 2019

Проблема в параметре values="value" в функции pivot. Это следует использовать для отображения списка фактических значений, а не имени столбца. Из документации :

values ​​- Список значений, которые будут преобразованы в столбцы выходного кадра данных.

и пример:

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"))
...