Расширение столбца массива в кадре данных Spark до отдельных столбцов - PullRequest
0 голосов
/ 02 января 2019

Как развернуть столбец массива так, чтобы каждый элемент в массиве становился столбцом в кадре данных?

Фрейм данных содержит столбец массива, а размер массива не фиксирован. Это означает, что столбец массива в первой строке может иметь n элементов, а столбец массива во второй строке может иметь m элементов.

Я пробовал функцию explode (), но она разбивает массив на строки, а не на столбцы.

Input dataframe
+---+------------------------------------------+
|id |arr                                       |
+---+------------------------------------------+
|1  |[{cid = a, pid = 12}, {cid = b, pid = 13}]|
|2  |[{cid = c, pid = 12}]                     |
+---+------------------------------------------+

Expected dataframe
+---+--------------------------------------------------+
|id |arr_12_cid | arr_12_pid | arr_13_cid | arr_13_pid |
+---+--------------------------------------------------+
|1  |a          | 12         | b          | 13         |
|2  |c          | 12         | null       | null       |
+---+--------------------------------------------------+

1 Ответ

0 голосов
/ 10 января 2019

Вы можете получить размер массива в отдельном столбце, найти максимум и затем выполнить итерацию

val dataDF = Seq((1, Array("a", "b", "c", "d")), (2, Array("a", "b"))).toDF("id", "data")
val z = dataDF.withColumn("data_length", functions.size($"data")).selectExpr("max(data_length)").head().getInt(0)
dataDF.select((0 until z).map(r => dataDF.col("data").getItem(r)): _*).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...