类似于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中数据帧无法实现更好/更简单。
答案 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)