Skip to content

count_distinct(col, *cols)

Описание

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

Параметры

  • col: Column - первый столбец для подсчета уникальных значений
  • *cols: Column - дополнительные столбцы для подсчета уникальных значений

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

Long - количество уникальных значений

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

from pyspark.sql.functions import count_distinct
from pyspark.sql import SparkSession

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

# Создаем DataFrame
data = [
    ("A", 1, "x"),
    ("A", 2, "y"),
    ("A", 2, "y"),
    ("B", 3, "z"),
    ("B", 4, "w"),
    ("B", 4, "w"),
    ("B", None, None)
]
df = spark.createDataFrame(data, ["group", "value1", "value2"])

# Используем count_distinct для подсчета уникальных значений
result = df.groupBy("group").agg(
    count_distinct("value1").alias("distinct_value1"),
    count_distinct("value2").alias("distinct_value2"),
    count_distinct("value1", "value2").alias("distinct_pairs")
).show()

# Результат:
# +-----+----------------+----------------+--------------+
# |group|distinct_value1 |distinct_value2 |distinct_pairs|
# +-----+----------------+----------------+--------------+
# |A    |2              |2              |2            |
# |B    |2              |2              |2            |
# +-----+----------------+----------------+--------------+

Примечания

  • NULL значения игнорируются при подсчете
  • Для подсчета всех значений используйте count()
  • Для приблизительного подсчета уникальных значений используйте approxCountDistinct()
  • Для подсчета истинных значений используйте count_if()
  • countDistinct() является синонимом count_distinct()