Повторите элементы массива k раз в pyspark - PullRequest
0 голосов
/ 01 ноября 2019

Пример данных DF со столбцом массива:

+--------------------+
|         COL1       |
+--------------------+
|[A, B, C]           |
+--------------------+

Я пытался использовать array_repeat , но мой тип данных уже имеет ArrayType

df.select(array_repeat(df.COL1, 2).alias('C')).collect()

Вывод:

+----------------------+
|         C            |
+----------------------+
|[[A, B, C],[A, B, C]] |
+----------------------+

Создан массив массивов

 C: array (nullable = false)
 |    |-- element: array (containsNull = true)
 |    |    |-- element: string (containsNull = false)

Ожидаемый результат:

+----------------------+
|         C            |
+----------------------+
|[A, B, C, A, B, C]    |
+----------------------+

1 Ответ

0 голосов
/ 01 ноября 2019

В Spark 2.4.0 появилась функция flatten(), которая удаляет один уровень вложенности массива. Учитывая, что 2.4.0 - это та же версия Spark, которая представила array_repeat(), вам просто нужно заключить вызов в array_repeat() в flatten():

>>> df.select(flatten(array_repeat(df.COL1, 2)).alias("C")).show(1, False)
+------------------------+
|C                       |
+------------------------+
|[A, B, C, A, A, B, C, A]|
+------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...