В Databricks/Spark разворачивание колонки в массив можно выполнить с использованием функции collect_list
или collect_array
.
collect_list
собирает все значения из колонки в список, сохраняя их порядок. К примеру, если у нас есть следующий DataFrame:
+---------+ | column| +---------+ | value1| | value2| | value3| +---------+
Мы можем использовать функцию collect_list
для развертывания колонки column
в массив, создав новую колонку array_column
:
from pyspark.sql.functions import collect_list df = df.withColumn('array_column', collect_list('column')) df.show()
Это приведет к следующему результату:
+---------+---------------+ | column|array_column | +---------+---------------+ | value1|[value1, value2, value3]| | value2|[value1, value2, value3]| | value3|[value1, value2, value3]| +---------+---------------+
collect_array
работает аналогичным образом, однако возвращает массив вместо списка. Развертывание колонки с использованием функции collect_array
будет выглядеть следующим образом:
from pyspark.sql.functions import collect_array df = df.withColumn('array_column', collect_array('column')) df.show()
Результат будет таким же, но с массивом вместо списка:
+---------+-----------------------+ | column|array_column | +---------+-----------------------+ | value1|[value1, value2, value3]| | value2|[value1, value2, value3]| | value3|[value1, value2, value3]| +---------+-----------------------+
Обратите внимание, что функции collect_list
и collect_array
могут собирать значения только на одном рабочем узле, поэтому их использование может быть ограничено объемом данных в вашем DataFrame. Если ваш DataFrame очень большой, вам может потребоваться разбить его на несколько частей или использовать другие методы для развертывания колонки в массив, такие как groupBy
и agg
.