강의

멘토링

로드맵

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

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

작성한 질문수

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

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

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

작성

·

610

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를 세지 않는다고 했는데...

 

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

퀴즈

Spark DataFrame에서 `withColumn()` 메서드의 주된 용도로 옳은 것은 무엇인가요?

DataFrame의 모든 컬럼을 삭제합니다.

새로운 컬럼을 추가하거나, 기존 컬럼의 값을 업데이트하거나, 데이터 타입을 변경합니다.

특정 조건을 만족하는 행들만 필터링합니다.

여러 DataFrame을 조인(Join)합니다.

답변 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할 수 있습니다. 

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

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

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

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

작성한 질문수

질문하기