2017-09-13 1 views
0

하이브 테이블 t1에 세 개의 열 (c1, c2, c3)이 있습니다. 특정 열이 null인지 여부를 확인하는 MySQL 코드가 있습니다. 동일한 테이블의 데이터 프레임을 가지고 있습니다. 데이터 프레임을 통해 동일한 로직을 구현하고 싶습니다. df에는 c1, c2, c3의 세 열이 있습니다.Spark 및 Scala를 사용하여 데이터 프레임을 통해 SQL 로직을 구현

여기 내가 사용 스칼라에서 다음과 같은 논리를 초안을 작성했던 SQL-

if(
t1.c1=0 Or IsNull(t1.c1), 
if(
IsNull(t1.c2/t1.c3), 
1, 
t1.c2/t1.c3 
), 
t1.c1 
) AS myalias 

는 "때"를 "경우"SQL의 대안으로. 나는 "또는"논리 (아래 굵은 글씨체)를 쓰면서 문제에 직면하고있다. 스칼라를 사용하여 Spark 데이터 프레임을 통해 위의 SQL 로직을 작성하려면 어떻게해야합니까?

val df_withalias = df.withColumn("myalias",when(
    Or((df("c1") == 0), isnull(df("c1"))), 
    when(
    (isNull((df("c2") == 0)/df("c3")), 
) 
) 
) 

위의 논리는 어떻게 작성합니까?

답변

1

먼저 Column|| 연산자를 사용하여 논리 OR 조건을 구성 할 수 있습니다. 또한 - when은 2 인자 (조건 및 값)를 소요하고 당신이 다른 값을 제공하려는 경우 (조건이 충족되지 않은 경우 사용) 참고 - 당신이 사용할 필요가 .otherwise :

val df_withalias = df.withColumn("myalias", 
    when(df("c1") === 0 || isnull(df("c1")), 
    when(isnull(df("c2")/df("c3")), 1).otherwise(df("c2")/df("c3")) 
).otherwise(df("c1")) 
) 
+0

일 ! Tzach에게 감사드립니다. –

관련 문제