Я имел в виду Как разбить массив на несколько столбцов в Spark для аналогичной необходимости.
Я могу использовать этот код для одного фрейма данных поля массива, однако, когда у меня есть фрейм данных с несколькими полями массива, я не могу конвертировать оба в несколько столбцов.
ДляНапример,
dataframe1
+--------------------+----------------------------------+----------------------------------+
| f1 |f2 |f3 |
+--------------------+----------------------------------+----------------------------------+
|12 | null| null|
|13 | null| null|
|14 | null| null|
|15 | null| null|
|16 | null| null|
|17 | [[Hi, 256, Hello]]| [[a, b], [a, b, c],[a, b]]|
|18 | null| null|
|19 | null| null|
+--------------------+----------------------------------+----------------------------------+
Я хочу преобразовать его в приведенный ниже фрейм данных:
dataframe2
+--------------------+----------------------------------+----------------------------------+----------------------------------+
| f1 |f2_0 |f3_0 |f3_1 |
+--------------------+----------------------------------+----------------------------------+----------------------------------+
|12 | null| null| null|
|13 | null| null| null|
|14 | null| null| null|
|15 | null| null| null|
|16 | null| null| null|
|17 | [Hi, 256, Hello]| [a, b]| [a, b, c]|
|18 | null| null| null|
|19 | null| null| null|
+--------------------+----------------------------------+----------------------------------+----------------------------------+
Я пытался использовать следующий код:
val dataframe2 = dataframe1.select(
col("f1") +: (0 until 2).map(i => col("f2")(i).alias(s"f2_$i")): _* +: (0 until 2).map(i => col("f3")(i).alias(s"f3_$i")): _*
)
Но выдает ошибку, говорящую, что он ожидает ")" после первого "_ *".