14

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

结果对象将按降序排列,因此第一个元素是最常出现的元素。默认情况下排除 NA 值。(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.value_counts.html

我很好奇这对于 Spark 中的数据帧是否不能更好/更简单地实现。

4

1 回答 1

16

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

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

火花 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)
于 2016-11-21T17:36:16.163 回答