2016-01-05 95 views
4

最終我想要的是列的模式,用於DataFrame中的所有列。對於其他彙總統計,我看到了一些選項:使用DataFrame聚合,或將DataFrame的列映射到矢量RDD(我也遇到麻煩),並使用MLlib中的colStats。但是我並沒有將模式看作是一種選擇。計算PySpark DataFrame列的模式?

回答

5

模式問題與中位數幾乎相同。雖然計算起來很容易,但計算起來相當昂貴。這是可以做到或者使用某種其次是局部和全局的聚合或使用剛剛另一-單詞計數和過濾:

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 

無論哪種方式,可能需要爲每列一個完整的洗牌。

+0

它給了我錯誤:AttributeError:'str'對象沒有屬性'別名' – Neo

+0

@Ajinkya這意味着你正在使用'builtins.max'而不是'pyspark.sql.functions.max'。 – zero323

+0

..yeah..it現在工作..感謝 – Neo