Количество уникальных элементов во всех столбцах кадра данных pyspark - PullRequest
0 голосов
/ 13 декабря 2018

Как можно вычислить количество уникальных элементов в каждом столбце кадра данных pyspark:

import pandas as pd
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
df = pd.DataFrame([[1, 100], [1, 200], [2, 300], [3, 100], [4, 100], [4, 300]], columns=['col1', 'col2'])
df_spark = spark.createDataFrame(df)
print(df_spark.show())
# +----+----+
# |col1|col2|
# +----+----+
# |   1| 100|
# |   1| 200|
# |   2| 300|
# |   3| 100|
# |   4| 100|
# |   4| 300|
# +----+----+

# Some transformations on df_spark here

# How to get a number of unique elements (just a number) in each columns?

Я знаю только следующее решение, которое очень медленно, обе эти строки вычисляются встолько же времени:

col1_num_unique = df_spark.select('col1').distinct().count()
col2_num_unique = df_spark.select('col2').distinct().count()

В df_spark.

есть около 10 миллионов строк.

1 Ответ

0 голосов
/ 13 декабря 2018

Попробуйте:

from pyspark.sql.functions import col, countDistinct

df_spark.agg(*(countDistinct(col(c)).alias(c) for c in df_spark.columns))

РЕДАКТИРОВАТЬ: Как и предполагал @pault, это дорогостоящая операция, и вы можете использовать approx_count_distinct() Тот, который он предложил, в настоящее время устарел (версия spark>= 2,1)

...