2016-06-18 7 views
2

나는 스파크 (스칼라)를 배우고 있으며 파생 된 열이있는 데이터 프레임을 만들고 있습니다. 나는 최선의 방법을 찾아 내려고 노력하고있다.스파크 데이터 프레임 계산 된 열

내 사용 사례가 값에 대한 또 다른 열을 찾아이 개 추출 된 컬럼 - 예를 들어 -

if (col22 = "USD") then col1 = "US" elseif (col22 = "CDN" the col1 = "CA" else null) 

다른 사용 사례가

if(col23 = "us" && col100 = "abc") then col2 = "10" else if (col23 = "us" && col100 = "bacd" && col99 is null then col2 = 11 else null) 

질문입니다 - 나는에 대한 UDF 함수를 작성했습니다 위에서 언급 한 계산. 이 일을하는 더 좋은 방법이 있는지 궁금합니다. udf 함수를 쓰는 것이 가장 좋습니다. 나는이 코드를 내 코드에서 한 번만 사용할 것이다.

내 스칼라 코드 -

def udf1 = udf((col22: String){ (col22) match { 
    case col22 if (col22 == "USD") => "US" 
    case col22 if (col22 == "CDN") => "CA" 
    case _ => null } }) 

val df1= df.select($"col1", $"col2", udf1($"col22").as("newcol"), udf2($"col23", $"col100").as(newcol2)) 

답변

3

당신은 같은 작업을 수행 할 수 있습니다

val df1 = df.withColumn(
    "newcol", 
    when($"col22" === "USD", lit("US")).otherwise(
    when($"col22" === "CDN", lit("CA")).otherwise(lit(null)) 
) 
) 
+0

는 (귀하의 예제에서) 인라인 코드를 사용하는 것이 좋습니다 또는 우리가 UDF를 사용해야합니까? – user1122

+0

필요한 경우를 제외하고는 UDF를 사용해서는 안되지만 인라인 라이닝 또한 어려운 요구 사항은 아닙니다. 다른 코드와 마찬가지로 SQL 표현식을 작성할 수 있습니다. – zero323