2017-04-27 5 views
0

아래의 데이터가 있는데 하나의 행 데이터 프레임을 RDD로 변환했습니다. PySpark 2.1.0을 사용하고 있습니다.행을 dys 변환 한 후 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)] 

내가 RDD 변환에 dataframe에 다음과 같은 선택을 사용하여 NULL 각 열에 어떤 값의 비율을 확인하려고했다 : 같은 비율이 작은 경우,

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

이후 LSOA_CODE의 경우이지만 FINAL_OUTCOME의 경우 거의 2/3이면 작은 백분율로 안전하게 열을 필터링 할 수 있지만 큰 백분율을 가진 열에 대해서는 데이터를 대신 쓸 수 있습니다.

데이터 손실을 최소화하는 것이 목표입니다. 질문은 위에서 열거 된 "행"의 열과 백분율에 어떻게 액세스 할 수 있습니까?

답변

1

각 컬럼에 대해 널 (null) percetage의 잘 생긴 DICT를 얻을 수 agg 안에 당신 별칭 열 경우

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

감사 DICT. 좋은 생각이야. 나는 Pyspark에 아직 익숙하지 않기 때문에 나는 이것들과 같은 발췌 문장을 고맙게 생각한다. – alortimor