Объекты GroupedData в Pyspark 2.4 - PullRequest
1 голос
/ 02 мая 2019

У меня есть данные в следующем формате:

 +------+-------------+-----------------+--------------------+
 |Serial|       respID|     VariableName|            Response|
 +------+-------------+-----------------+--------------------+
 |    11|1_10001070394|Respondent.Serial|                  11|
 |    11|1_10001070394|Respondent.Origin|Interviewer Serve...|
 |    11|1_10001070394|              AGE|                  48|
 |    11|1_10001070394|              SEX|                Male|
 |    11|1_10001070394|             Eth1|                  No|
 +------+-------------+-----------------+--------------------+

Мне нужно преобразовать его в следующий формат

+------+-------------+-----------------+--------------------+---------+---------+-------+
|Serial|       respID|Respondent.Serial|   Respondent.Origin|      AGE|      SEX|   Eth1|
+------+-------------+-----------------+--------------------+---------+---------+-------+
|    11|1_10001070394|               11|Interviewer Serve...|       48|     Male|     No|

Я могу сделать это в Python для небольших наборов данных с помощью следующего кода -

df.groupby(['respID','Serial']).apply(lambda 
x:x.pivot(columns='VariableName', values='Response')).reset_index(). 
groupby(['respID','Serial']).first()

но когда я пытаюсь использовать PySpark 2.4 (в DataBricks), создается впечатление, что объект GroupedData не поддерживает извлечение 1-го значения Not Null.

Я пробовал следующее

df.groupBy(['respID','Serial']).pivot('VariableName',['Response'])

Создает объект GroupedData, но не поддерживает преобразование в фрейм данных pyspark.

1 Ответ

0 голосов
/ 02 мая 2019
from pyspark.sql.functions import  expr 
x=File.groupBy("respID","Serial").pivot("VariableName").agg(expr("coalesce(first(Response),'')"))

2136 столбцов - это слишком много в сводной таблице

...