PySpark - конвертировать строку в массив - PullRequest
0 голосов
/ 18 марта 2020

В моем фрейме данных есть столбец, представляющий собой строку со значением, например ["value_a", "value_b"].

Каков наилучший способ преобразовать этот столбец в массив и взорвать его? Сейчас я делаю что-то вроде:

explode(split(col("value"), ",")).alias("value")

Но я получаю строки вроде ["awesome" или "John" или "Maria]", и ожидаемый результат должен быть awesome, John , Maria (по одному элементу в строке, поэтому я использую Explode).

Пример кода для воспроизведения:

sample_input = [
  {"id":1,"value":"[\"johnny\", \"maria\"]"},
  {"id":2,"value":"[\"awesome\", \"George\"]"}
]

df = spark.createDataFrame(sample_input)

df.select(col("id"), explode(split(col("value"), ",")).alias("value")).show(n=10)

Вывод, сгенерированный с помощью кода выше:

+---+----------+
| id|     value|
+---+----------+
|  1| ["johnny"|
|  1|  "maria"]|
|  2|["awesome"|
|  2| "George"]|
+---+----------+

Ожидаемое должно быть:

+---+----------+
| id|    value|
+---+----------+
|  1| johnny |
|  1| maria  |
|  2| awesome|
|  2| George|
+---+----------+

1 Ответ

0 голосов
/ 18 марта 2020

работал для меня.

sample_input = [
  {"id":1,"value":["johnny", "maria"]},
  {"id":2,"value":["awesome", "George"]}
]

df = spark.createDataFrame(sample_input)

df.select(col("id"), explode(col("value")).alias("value")).show(n=10)
+---+-------+
| id|  value|
+---+-------+
|  1| johnny|
|  1|  maria|
|  2|awesome|
|  2| George|
+---+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...