最终,我想要的是一个列的模式,用于数据文件中的所有列。对于其他汇总统计,我看到了两个选项:使用DATAFRAM聚合,或者将数据文件的列映射到RDD向量(我也有困难做的事情),并使用来自MLlib的colStats。但我不认为模式是一个选项。

最佳答案

模式的问题与中位数几乎相同。虽然计算简单,但计算相当昂贵。它可以使用排序,其次是本地和全局聚合,或者只使用另一个单词计数和过滤器:

import numpy as np
np.random.seed(1)

df = sc.parallelize([
    (int(x), ) for x in np.random.randint(50, size=10000)
]).toDF(["x"])

cnts = df.groupBy("x").count()
mode = cnts.join(
    cnts.agg(max("count").alias("max_")), col("count") == col("max_")
).limit(1).select("x")
mode.first()[0]
## 0

无论哪种方式,都可能需要对每列进行完全洗牌。

10-01 21:45