Как создать новый столбец для моего фрейма данных, значениями которого являются карты, составленные из значений из разных столбцов? - PullRequest
0 голосов
/ 14 февраля 2019

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

Скажи, что яначнем с этого фрейма данных:

+---+---+---+
| pk|  a|  b|
+---+---+---+
|  1|  2|  1|
|  2|  4|  2|
+---+---+---+ 

Я хочу, чтобы результирующий фрейм данных выглядел как

+----------------+---+
|              ab| pk|
+----------------+---+
|[A -> 2, B -> 1]|  1|
|[A -> 4, B -> 2]|  2|
+----------------+---+

Где A и B - это имена, соответствующие a и b (Думаю, я могу исправить это с помощью псевдонима, но сейчас я использую UDF, который возвращает карту {'A': column a value, 'B': column b value})

Есть ли способ сделать это с помощью create_map или иным образом без UDF

1 Ответ

0 голосов
/ 14 февраля 2019

create_map принимает аргументы как key, value, key, value ..., для вашего случая:

import pyspark.sql.functions as f
df.select(
  f.create_map(f.lit('A'), f.col('a'), f.lit('B'), f.col('b')).alias('ab'), 
  f.col('pk')
).show()
+----------------+---+
|              ab| pk|
+----------------+---+
|[A -> 2, B -> 1]|  1|
|[A -> 4, B -> 2]|  2|
+----------------+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...