인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

스파크 머신러닝 완벽 가이드 - Part 1

Spark DataFrame에서 Null과 NaN 데이터 찾기

Spark에서 결측치가 있는 칼럼의 결측치 개수 셀 때 질문입니다!

작성

·

524

0

안녕하세요! 먼저 설 명절 복 많이 받으시길 바랍니다 ㅎㅎ

 

해당 강의에서 Spark 데이터프레임에서 결측치가 있는 칼럼의 결측치 개수를 카운트할 때 pyspark.sql.functions 모듈에 있는 count, when 메소드를 활용하잖아요!?

예를 들어, 아래와 같은 코드가 있다고 할 때,

titanic_sdf.select( [ count( when( col(c).isNull(), c ) ) for c in titanic_sdf.columns ] ) 

강의에서 설명해주실 때, count 메소드는 특정 칼럼의 값이 Null이면 그 Row를 카운트하지 않는다고 하셨는데요! 

그러면 위와 같이 when( col(c).isNull(), c ) 라는 문법은 col(c) 라는 칼럼의 값이 Null일 경우, c 값 즉, Null인 값으로 하라는 의미이잖아요? SQL로 바꾸자면,...

CASE WHEN c IS NULL 

            THEN c              // 어차피 c 가 Null 값

             ELSE END

이잖아요!?  그러면 여기서 c 라는 값 자체가 어차피 Null 인데, count 메소드는 어떻게 Null인 Row 개수를 셀수 있는 건가요? count 메소드는 Null 값인 Row를 세지 않는다고 했는데...

 

혹시 질문 내용이 이해가 안가신다면 답글 달아주세요...!

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

음, 이건 제가 강의에서 설명을 잘못드렸습니다.   말씀하신대로 count는 null을 포함하기 때문에 그런 식으로 이해가 되게 설명드리면 안되는 부분이었습니다. 

when( col(c).isNull(), c )에서 c는 컬럼 c 값이 아니라 문자열 c입니다. 그러니까 컬럼명칭 문자열 입니다. 가령 Age 컬럼의 null  값을 추출하는 것이라면 

count(case when Age is null then 'Age' else Null end) 입니다. 그래서 null값을 count할 수 있습니다. 

좋은 지적 감사합니다. 조만간 시간 봐서 해당 내용을 수정하도록 하겠습니다. 

연휴임에도 빠른 자세한 답변 감사합니다! 설명해주신 부분에 대해 명확히 이해했습니다!

이번 질문으로 또 새로운 지식을 배워갑니다 감사합니다! :)

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

질문하기