2017-10-04 17 views
0

私はSpark 1.6で働いています(残念ながら)。私は値として0と1を持つ多くの列を持つデータフレームを持っています。私は1列あたり1の割合を取っていきたいです。 だから私は実行します。カラムあたりのpysparkデータフレームの効率を効率的に取る

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

これを行うには、より効率的な方法はありますか?たぶん、列ごとの合計で関数を組み込んで(私は何も見つかりませんでした)。

答えて

1

あなたは追加データが

from pyspark.sql.functions import mean 

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

が、それ以外のスキャンを避けるためにmeancountと分裂を置き換えることができ、それはあなたと同じくらい効率的です取得することができます。

1

あなたは機能モジュールからの和を()を使用することができ、

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