计算 PySpark DataFrame 列的模式?

新手上路,请多包涵

最终我想要的是 DataFrame 中所有列的列模式。对于其他汇总统计信息,我看到了几个选项:使用 DataFrame 聚合,或将 DataFrame 的列映射到向量的 RDD(我也遇到了麻烦)并使用 colStats 来自 MLlib。但我不认为模式是那里的一种选择。

原文由 RKD314 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 472
2 个回答

模式的问题与中位数的问题几乎相同。虽然它很容易计算,但计算却相当昂贵。它可以使用排序后跟本地和全局聚合或使用 just-another-wordcount 和过滤器来完成:

 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

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

原文由 zero323 发布,翻译遵循 CC BY-SA 3.0 许可协议

此行将为您提供 spark 数据帧 df 中的“col”模式:

 df.groupby("col").count().orderBy("count", ascending=False).first()[0]

对于 df 使用中所有列的模式列表:

 [df.groupby(i).count().orderBy("count", ascending=False).first()[0] for i in df.columns]

要添加名称以识别哪一列的模式,制作二维列表:

 [[i,df.groupby(i).count().orderBy("count", ascending=False).first()[0]] for i in df.columns]

原文由 Tesia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题