Pyspark Dynami c транспонировать с использованием проблемы стека - PullRequest
0 голосов
/ 12 апреля 2020

Мне нужно транспонировать входной фрейм данных в столбцы входных значений ( столбцы значений могут быть от 1 до n ):

входной фрейм данных:

|dim1|dim2|  byvar|value1|value2|
| 101| 102|MTD0001|     1|    10|
| 201| 202|MTD0002|     2|    12|
| 301| 302|MTD0003|     3|    13|

Используя стек и selectExpr, последние столбцы значений транспонируются, как показано ниже:

result = df.selectExpr('dim1', 'dim2', 'byvar', 
                       "stack(2, 'v1', v1, 'v2', v2) as (names, values)")

выходной фрейм данных:

|dim1|dim2|  byvar| names|values|
| 101| 102|MTD0001|value1|     1|
| 101| 102|MTD0001|value2|    10|
| 201| 202|MTD0002|value1|     2|
| 201| 202|MTD0002|value2|    12|
| 301| 302|MTD0003|value1|     3|
| 301| 302|MTD0003|value2|    13|

Но во время динамического вставления возникает ошибка список столбцов в стеке:

l = []
seperator = ', '
A = ['value1', 'value2']      # If this is acheived i will take columns from df.columns
B = seperator.join(A).split(",")
n = len(A)
for a in range(len(A)):
    l.append("'{}'".format(A[a]) + "," + B[a])
k = seperator.join(l)

Для понимания k = 'значение1', значение1, 'значение2', значение2 и n = 2

Ошибка при передаче переменной n и k в метод стека.

result = df_inp.selectExpr('dim1', 'dim2', 'byvar', "stack(n, eval(k)) as (names, values)")

Не могли бы вы дать мне знать, как передать переменные в вышеуказанную команду для работы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...