RKD*_*314 6 python apache-spark apache-spark-sql pyspark
最终我想要的是DataFrame中所有列的列模式.对于其他摘要统计,我看到了几个选项:使用DataFrame聚合,或将DataFrame的列映射到向量的RDD(我也遇到了麻烦)并使用colStatsMLlib.但我不认为模式是一种选择.
模式的问题与中位数几乎相同.虽然它易于计算,但计算相当昂贵.它可以使用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
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,它可能需要每列完全洗牌.
小智 5
此行将为您提供 Spark 数据帧 df 中的“col”模式:
df.groupby("col").count().orderBy("count", ascending=False).first()[0]
Run Code Online (Sandbox Code Playgroud)
有关 df 中所有列的模式列表,请使用:
[df.groupby(i).count().orderBy("count", ascending=False).first()[0] for i in df.columns]
Run Code Online (Sandbox Code Playgroud)
要添加名称来标识哪一列的模式,请创建 2D 列表:
[[i,df.groupby(i).count().orderBy("count", ascending=False).first()[0]] for i in df.columns]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6059 次 |
| 最近记录: |