Как подсчитать вхождения каждого отдельного значения для каждого столбца в кадре данных?
edf.select("x").distinct.show()
показывает различные значения, которые присутствуют в столбце x
edf
DataFrame.
Есть ли эффективный метод, чтобы также показать количество раз, когда эти различные значения возникают в кадре данных? (подсчет для каждого отдельного значения)
Ответы
Ответ 1
countDistinct
, вероятно, является первым выбором:
import org.apache.spark.sql.functions.countDistinct
df.agg(countDistinct("some_column"))
Если скорость более важна, чем точность, вы можете рассмотреть approx_count_distinct
(в approxCountDistinct
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()