, Мы должны использовать функцию агрегирования при повороте, так как поворот всегда находится в контексте агрегации. Функция агрегирования может быть суммой, счетом, средним, минимальным или максимальным, в зависимости от желаемого выхода -

от вопрос уже есть ответ:

Как развернуть DataFrame? 6 ответов

Я хочу перенести информационный кадр. Это всего лишь небольшая выдержка из моего исходного кадра данных -

from pyspark.sql.functions import to_timestamp, date_format 
valuesCol = [('22','ABC Ltd','U.K.','class 1',102),('22','ABC Ltd','U.K.','class 2',73),('22','ABC Ltd','U.K.','class 3',92),
             ('51','Eric AB','Sweden','class 1',52),('51','Eric AB','Sweden','class 2',34),('51','Eric AB','Sweden','class 3',11)]
df = sqlContext.createDataFrame(valuesCol,['ID','Firm','Country','Class','Revenue'])
df.show()
+---+-------+-------+-------+-------+
| ID|   Firm|Country|  Class|Revenue|
+---+-------+-------+-------+-------+
| 22|ABC Ltd|   U.K.|class 1|    102|
| 22|ABC Ltd|   U.K.|class 2|     73|
| 22|ABC Ltd|   U.K.|class 3|     92|
| 51|Eric AB| Sweden|class 1|     52|
| 51|Eric AB| Sweden|class 2|     34|
| 51|Eric AB| Sweden|class 3|     11|
+---+-------+-------+-------+-------+

Там нет функции транспонирования вPySpark в качестве таких. Одним из способов достижения необходимого результата является создание 3dataframes наclass1, class2 and class3 а потом присоединяется (left join) им. Но это может повлечь за собой перестановки по сети, в зависимости от хеш-разделителя, и это очень дорого. Я уверен, должен быть элегантный и простой способ.

Ожидаемый результат:

+---+-------+-------+-------+-------+-------+
| ID|   Firm|Country| Class1| Class2| Class3|
+---+-------+-------+-------+-------+-------+
| 22|ABC Ltd|   U.K.|    102|     73|     92|
| 51|Eric AB| Sweden|     52|     34|     11|
+---+-------+-------+-------+-------+-------+

Ответы на вопрос(1)

Ваш ответ на вопрос