Spark更简单的value_counts

时间:2016-11-21 17:21:25

标签: apache-spark apache-spark-sql apache-spark-dataset

类似于Spark - Group by Key then Count by Value的东西可以让我在Spark中模仿df.series.value_counts() Pandas的功能:

  

生成的对象将按降序排列,以便第一个   element是最常出现的元素。不包括NA值   默认情况下。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.value_counts.html

我很好奇,如果在Spark中数据帧无法实现更好/更简单。

1 个答案:

答案 0 :(得分:6)

这只是一个基本的聚合,不是吗?

df.groupBy($"value").count.orderBy($"count".desc)

熊猫:

import pandas as pd

pd.Series([1, 2, 2, 2, 3, 3, 4]).value_counts()
2    3
3    2
4    1
1    1
dtype: int64

Spark SQL:

Seq(1, 2, 2, 2, 3, 3, 4).toDF("value")
  .groupBy($"value").count.orderBy($"count".desc)
+-----+-----+
|value|count|
+-----+-----+
|    2|    3|
|    3|    2|
|    1|    1|
|    4|    1|
+-----+-----+

如果您想要添加其他分组列(例如"键"),请将这些列添加到groupBy

df.groupBy($"key", $"value").count.orderBy($"count".desc)
相关问题