有些类似于Spark - 按键分组再按值计数的方法可以让我在Spark中模拟Pandas的df.series.value_counts()
功能,结果对象将按降序排列,以使第一个元素是出现最频繁的元素。默认情况下不包括NA值。(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.value_counts.html)
我想知道数据框在Spark中是否可以更好/更简单地实现这一功能。
有些类似于Spark - 按键分组再按值计数的方法可以让我在Spark中模拟Pandas的df.series.value_counts()
功能,结果对象将按降序排列,以使第一个元素是出现最频繁的元素。默认情况下不包括NA值。(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.value_counts.html)
我想知道数据框在Spark中是否可以更好/更简单地实现这一功能。
这只是基本的聚合,不是吗?
df.groupBy($"value").count.orderBy($"count".desc)
Pandas:
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|
+-----+-----+
如果你想要包括额外的分组列(比如"key"),只需将其放入groupBy
中即可。df.groupBy($"key", $"value").count.orderBy($"count".desc)