最终我想要的是DataFrame中所有列的列模式.对于其他摘要统计,我看到了几个选项:使用DataFrame聚合,或将DataFrame的列映射到向量的RDD(我也遇到了麻烦)并使用colStats
MLlib.但我不认为模式是一种选择.
模式的问题与中位数几乎相同.虽然它易于计算,但计算相当昂贵.它可以使用sort后跟本地和全局聚合或使用just-another-wordcount和filter来完成:
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
无论哪种方式,它可能需要每列完全洗牌.