Как подсчитать вхождения каждого отдельного значения для каждого столбца в кадре данных?

edf.select("x").distinct.show() показывает различные значения, которые присутствуют в столбце x edf DataFrame.

Есть ли эффективный метод, чтобы также показать количество раз, когда эти различные значения возникают в кадре данных? (подсчет для каждого отдельного значения)

Ответ 1

countDistinct, вероятно, является первым выбором:

import org.apache.spark.sql.functions.countDistinct

df.agg(countDistinct("some_column"))

Если скорость более важна, чем точность, вы можете рассмотреть approx_count_distinctapproxCountDistinct Spark 1.x approxCountDistinct:

import org.apache.spark.sql.functions.approx_count_distinct

df.agg(approx_count_distinct("some_column"))

Чтобы получить значения и цифры:

df.groupBy("some_column").count()

В SQL (spark-sql):

SELECT COUNT(DISTINCT some_column) FROM df

а также

SELECT approx_count_distinct(some_column) FROM df

Ответ 2

Еще один вариант, не прибегая к функциям sql

df.groupBy('your_column_name').count().show()

show распечатает различные значения и их вхождения. Результат без показа будет кадром данных.

Ответ 3

df.select("some_column").distinct.count

Ответ 4

import org.apache.spark.sql.functions.countDistinct

df.groupBy("a").agg(countDistinct("s")).collect()