2017-04-27 18 views
0

我有下面的數據,已將單行數據幀轉換爲RDD。 我正在使用PySpark 2.1.0。訪問一個行,在Df轉換後,在Pyspark

[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)] 

我試圖確定什麼值的比例在每一列是NULL,使用下面的選擇上一個數據幀到RDD轉換:

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

此後,如果比例很小,如是LSOA_CODE的情況,但幾乎三分之二的FINAL_OUTCOME,然後 我可以安全地篩選具有小百分比的列的行,而是具有大百分比的列的精算數據。

最終的目標是儘量減少數據丟失。所以問題是,我如何從上面列出的「行」訪問列和百分比?

回答

1

如果別名列內agg你可以得到空percetage的一個非常漂亮的字典爲每列:

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

會給你一個形式快譯通{'LSOA_CODE': 0.021671826625387025, 'CRIME_TYPE': 0.0, ...}

+0

感謝。好想法。我對Pyspark仍然很陌生,所以我喜歡這些片段。 – alortimor