2017-10-04 41 views
0

我在Spark 1.6中工作(不幸)。我有一個數據框與許多列與0和1的值。我想獲得每列1的百分比。 所以我做的:高效地獲得每列pyspark數據幀的總和

rowsNum = dfBinary.count() 
dfStat = dfBinary.select([(count(when(col(c) == 1 , c))/rowsNum). 
alias(c) for c in dfBinary.columns]) 

有沒有更有效的方式來做到這一點?也許一個內置函數與每列的總和(我沒有找到任何通過)。

回答

1

可以更換count和分裂與mean,以避免額外的數據掃描

from pyspark.sql.functions import mean 

dfStat = dfBinary.select([ 
    (mean(when(col(c) == 1 , c))). 
    alias(c) for c in dfBinary.columns]) 

但除此之外,它是像你一樣有效可以得到。

1

可以使用從功能模塊和(),

from pyspark.sql.functions import sum 
dfBinary.select([(sum(c)/rowsNum).alias(c) for c in dfBinary.columns]).show()