2017-05-02 8 views
1

私は大規模なpysparkデータフレームを持っており、データフレームからすべて0である列を削除する必要があります。私はすでに集計を組み合わせてみました同じ値(0など)のpyspark列を削除する最も速い方法は何ですか?

SLOW ...

columns = list(masterdata_raw.schema.names) 
zero_col = [] 
for col_ in columns: 
    col_max = masterdata_raw.agg({col_: "max"}).collect()[0] 
    col_min = masterdata_raw.agg({col_: "min"}).collect()[0] 
    if col_max == 0 and col_min == 0: 
     zero_col = zero_col.append(col_) 

#*********removing the features found above************ 
for col_ in zero_col: 
    masterdata_raw = masterdata_raw.drop(col_) 

残念ながら、これは二回集約を実行し、二回にも.collectの結果、しかし:私は現在、このために以下のコードを使用しています1つの辞書内で同じ列名を集約しようとしていたため、結果が1つしか戻ってこなかった。私は別の名前を持つ別の列を追加して、同時に両方を集計することができたと思いますが、それは非効率的にも見えました。

pysparkのこれらの0列すべてをフィルタリングする最も速い方法は何ですか?

+0

何describe' 'は? – acushner

答えて

0

理由だけではなく、

for col_ in columns: 
    if masterdata_raw.groupBy().sum(col_).collect() == 0 
     masterdata_raw.drop(col_) 
+0

これは必ずしも機能しません。 (例えば、50個の負の列と50個の列の列) – acushner

関連する問題