Skip to content

collect_set(col)

Описание

Функция collect_set() собирает все уникальные значения столбца в массив, удаляя дубликаты. Это агрегатная функция, которая должна использоваться с groupBy().

Параметры

  • col: Column - столбец, значения которого нужно собрать в массив

Возвращаемое значение

Array - массив уникальных значений столбца

Пример использования

from pyspark.sql.functions import collect_set
from pyspark.sql import SparkSession

# Создаем SparkSession
spark = SparkSession.builder.appName("collect_set_example").getOrCreate()

# Создаем DataFrame
data = [
    ("A", 1),
    ("A", 2),
    ("A", 2),
    ("B", 3),
    ("B", 4),
    ("B", 4)
]
df = spark.createDataFrame(data, ["group", "value"])

# Используем collect_set для сбора уникальных значений в массив
result = df.groupBy("group").agg(
    collect_set("value").alias("unique_values")
).show(truncate=False)

# Результат:
# +-----+-------------+
# |group|unique_values|
# +-----+-------------+
# |A    |[1, 2]       |
# |B    |[3, 4]       |
# +-----+-------------+

# Пример с разными типами данных
data = [
    ("A", "x"),
    ("A", "y"),
    ("A", "x"),
    ("B", "z"),
    ("B", "w"),
    ("B", "z")
]
df = spark.createDataFrame(data, ["group", "value"])

result = df.groupBy("group").agg(
    collect_set("value").alias("unique_values")
).show(truncate=False)

Примечания

  • Функция удаляет дубликаты значений
  • Порядок элементов в массиве не гарантирован
  • Для сохранения дубликатов используйте collect_list()
  • Для сортировки массива используйте array_sort()
  • Для фильтрации массива используйте filter()