2017-04-27 11 views
0

私は以下のデータを持っています.1行のデータフレームをRDDに変換しました。 私はPySpark 2.1.0を使用しています。Pysparkでdf変換後に行にアクセス

[Row((1 - (count(YEAR_MTH)/count(1)))=0.0, 
(1 - (count(REPORTED_BY)/count(1)))=0.0, 
(1 - (count(FALLS_WITHIN)/count(1)))=0.0, 
(1 - (count(LOCATION)/count(1)))=0.0, 
(1 - (count(LSOA_CODE)/count(1)))=0.021671826625387025, 
(1 - (count(LSOA_NAME)/count(1)))=0.021671826625387025, 
(1 - (count(CRIME_TYPE)/count(1)))=0.0, 
(1 - (count(CURRENT_OUTCOME)/count(1)))=0.0, 
(1 - (count(FINAL_OUTCOME)/count(1)))=0.6377708978328174)] 

私はRDDへの変換データフレームで次の選択を使用して、NULLで各列の値の何パーセントを確認しようとしていた:として、その後

col_with_nulls = df.agg(*[(1 - (fn.count(c)/fn.count('*'))) 
        for c in cols_to_categorise]).rdd 

、割合が小さい場合LSOA_CODEの場合ですが、FINAL_OUTCOMEの場合はほぼ3分の2ですが、 小さいパーセントで列の行をフィルタリングできますが、大きな割合の列のデータを確実に代入できます。

最終的な目的は、データ損失を最小限に抑えることです。だから問題は、上記の「行」の列とパーセントにどのようにアクセスできますか?あなたは各列のヌルpercetageの見栄えの良い辞書得ることができますagg内側の列別名

答えて

1

あなたの場合:

null_percentage = df.agg(*[(1 - (fn.count(c)/fn.count('*'))).alias(c) 
    for c in cols_to_categorise]).first().asDict() 

は、フォームでのdictに{'LSOA_CODE': 0.021671826625387025, 'CRIME_TYPE': 0.0, ...}

+0

感謝します。いい案。私はPysparkにはまだ新しいので、これらのようなスニペットを感謝します。 – alortimor

関連する問題