2017-05-21 3 views
0

데이터 프레임에 n 개의 열이 있고 이러한 모든 열의 빈 문자열을 null로 대체하려고합니다. 스파크 데이터 프레임에서 특정 값을 null로 바꿉니다.

나는

val ReadDf = rawDF.na.replace("columnA", Map("" -> null)); 

val ReadDf = rawDF.withColumn("columnA", if($"columnA"=="") lit(null) else $"columnA"); 

둘 다 작동하지 않았다을 사용했습니다.

모든 리드가 높이 평가 될 것입니다. 감사.

+1

여기에 많은 오류가있다 그것은 단지 빈 문자열을 교체 관련이없는 것 null뿐만 아니라 jdbc 오류도 있고 실제로는 재현 할 수 없기 때문에 현재 설명과 정보로 두 번째 오류를 해결할 수 없습니다. 닫히는 주제이므로 질문을 검토하십시오! – eliasah

+0

내가 이해할 수없는 한 가지는, [내가] 물어 본 질문과 어떻게 관련이 있는가 [1]. 그것은 MySQL의 문자열 배열에 대해 이야기하고 내 질문은 데이터 프레임에서 null로 빈 문자열을 대체하는 것이 었습니다. 누군가가 나를 계몽 할 수 있습니까? –

+0

여기 있습니다. 나는이 질문이 중복 된 것으로 결론 지었지만 이전에 언급 한 바와 같이 2 가지 오류가 있으며 최신 오류 메시지는 유권자가 언급 한 질문과 관련이 있습니다. – eliasah

답변

1

replace이 값을 null로 바꿀 수 없도록하는 버그로 인해 첫 번째 접근 솔기가 실패합니다 (here 참조).

두 번째 접근 방식은 집행 측 Dataframe 지침은 드라이버 측 스칼라 코드를 혼동하고 있기 때문에 실패 표현식이 드라이버에 일단 을 평가한다면 - 다른 (그리고 레코드 당); 당신은 when 함수 호출로 대체하고 싶습니다; 또한, 컬럼의 값을 비교할 수는 === 연산자를 사용해야하고,뿐만 아니라 운전자 측에게 Column 개체를 비교 스칼라의 ==는 :

import org.apache.spark.sql.functions._ 

rawDF.withColumn("columnA", when($"columnA" === "", lit(null)).otherwise($"columnA")) 
관련 문제