2016-12-02 5 views
0
var rtn = df.select(
       col(colmap.get("AAAAA")) as "AAAAA", 
       lit(colmap.get("BBBBB")) as "BBBBB", 
       col(colmap.get("CCCCC")) as "CCCCC", 
       col(colmap.get("DDDDD")) as "DDDDD" 
      ) 
      .where(col("AAAAA").isNotNull && col("BBBBB").isNotNull && col("CCCCC").isNotNull && col("DDDDD").isNotNull) 

      rtn.show() 

리턴 데이터 프레임에는 여전히 일부 null 값이 있습니다. 내가 잘못하고 있니?스파크 - 다중 조건을 포함한 데이터 프레임


전류 출력

+--------+-----------+----------- 
|AAAAA|BBBBB|CCCCC|DDDDD|EEEEE| 
+--------+-----------+----------- 
|A11111|B12345|C1111|D11111|  | 
|A22222|B12345|C2222|D22222|  | 
|A33333|B12345|C3333|D33333|E11111| 
|A44444|B12345|C4444|D44444|  | 
|A55555|B12345|C5555|D55555|E11111| 

내 예상 출력

+--------+-----------+----------- 
|AAAAA|BBBBB|CCCCC|DDDDD|EEEEE| 
+--------+-----------+----------- 
|A11111|B12345|C1111|D11111|E11111| 
|A22222|B12345|C2222|D22222|E11111| 
|A33333|B12345|C3333|D33333|E11111| 
|A44444|B12345|C4444|D44444|E11111| 
|A55555|B12345|C5555|D55555|E11111| 

EEEEE 열에 일부 null 값이 여전히있다. 조건이 제대로 작동하지 않는 것 같은 DataFrame.

+1

코드를 덤핑하는 대신 수행중인 작업을 자세히 설명해 주실 수 있습니까? 또한 예제 데이터 및 예상 결과를 제공하십시오. – mtoto

+0

where 절에 EEEEE 열을 추가하지 않았습니다. –

답변

1

데이터에 NULLs이 아닌 빈 문자열이있는 것 같습니다. 빈 문자열을 필터링하려면 rlike 사용할 수 있습니다

import org.apache.spark.sql.functions.not 

not($"foo".rlike("^\\s*$"))) // or !$"foo".rlike("^\\s*$") 

또는 trimlength :

: 측면으로
import org.apache.spark.sql.functions.{trim, length} 

length(trim($"foo")) =!= 0 

당신이 NULL을 포함하는 행을 드롭 컬럼의 순서로 DataFrameNaFunctions.drop을 사용할 수 있습니다
df.na.drop(Seq("foo", "bar")) 

또는

df.na.drop() 

행을 포함하는 모든 NULL을 삭제하려는 경우

+0

맞습니다. 그것은 null이 아니었다. DB에서 null 데이터를 가져 왔지만 null이 아니라 검은 문자열로 포함됩니다. 감사 :) –

관련 문제