2017-03-28 3 views
1

나는 창 (10)에 스파크 2.1를 실행하고를 몇 열을 부분 집합 제거, 나는 JDBC 사용하여 불꽃 MySQL에서 가져온 데이터를 테이블 내가를 만들려면이스파크 : 널 (null) 행

x  y  z 
------------------ 
1  a  d1 
Null v  ed 
5  Null Null 
7  s  Null 
Null bd  Null 

처럼 보인다 위의 테이블에서 x and y columns 만있는 새로운 스파크 데이터 세트를 만들었고이 두 열 중 하나에서 null이없는 행만 보관하는 것을 원하지 않았습니다. 내 결과 테이블은 다음이

x  y 
-------- 
1  a 
7  s 

과 같아야하는 것은 코드 : 같이

val load_DF = spark.read.format("jdbc").option("url", "jdbc:mysql://100.150.200.250:3306").option("dbtable", "schema.table_name").option("user", "uname1").option("password", "Pass1").load() 
val filter_DF = load_DF.select($"x".isNotNull,$"y".isNotNull).rdd 
// lets print first 5 values of filter_DF 
filter_DF.take(5) 
res0: Array[org.apache.spark.sql.Row] = Array([true,true], [false,true], [true,false], [true,true], [false,true]) 

은, 위의 결과가 나에게 실제 값을 제공하지 않지만 값이 때 부울 값 (참을 반환 null이 아닐 때 false, 값이 Null 일 때 false)

답변

1

시도해보십시오.

val load_DF = spark.read.format("jdbc").option("url", "jdbc:mysql://100.150.200.250:3306").option("dbtable", "schema.table_name").option("user", "uname1").option("password", "Pass1").load() 

지금;

load_DF.select($"x",$"y").filter("x !== null").filter("y !== null") 
+0

감사합니다, 그것은 오류없이 실행되지만 출력에 데이터가 없습니다. 그것은 빈 테이블을 표시했습니다. 나는 또한이'load_DF.select ($ "x", $ "y")와 같은 단일 필터로 시도했다. filter ("x! = null")'그러나 운이 없다. – Nagesh

+0

load_DF.select ($ "x", $ "y") 필터 시도 ("x! = Null") –

1

불꽃이 떨어 null 값이 목적을 위해 DataFrameNaFunctions을 제공하는 등 사용자의 예에서

당신은 단지 당신이

val noNullValues = load_DF.na.drop("all", Seq("x", "y")) 

이 의지를로드하는 DataSet에서 다음 호출 할 필요가 위 x 또는 y 필드에서 null이 발생하지만, z이 아닌 레코드는 삭제하십시오. 데이터를 입력하거나 필요한 경우 값을 변환하는 추가 옵션에 대해서는 DataFrameNaFunctions을 참조하십시오. 대신 당신이 filterselect를 교체해야 - 당신이 select을 수행 할 때

+0

답변에 기반하여이 작업은 저에게 효과적이었습니다 : val filter_DF = load_DF.select ($ "x", $ "y") .n.drop(). rdd' – Nagesh

+1

업데이트 된 답변을 확인하십시오. 이제 'x와 y'만 명시 적으로 삭제하도록 지정합니다. 원래의 대답은 당신이 요구하지 않은'z == null'이있는 레코드를 삭제했을 것입니다. – Brad

0

당신은 단순히 값 (이 경우 isNotNull에) 기능을 적용하고 있습니다. 당신이 원하는 경우

val filter_DF = load_DF.filter($"x".isNotNull && $"y".isNotNull) 

가 나 :

val filter_DF = load_DF.filter($"x".isNotNull).filter($"y".isNotNull)