2016-09-09 3 views
3

DataFrame 두 개의 조건을 결합하려고합니다.Spark DataFrame의 조건부 결합

나는 두 dataframe A를 가지고와 B는

A는 B가 m_cd, c_cd 기록 열을 포함 ID, m_cd 및 c_cd 열을 포함

조건입니다 -

  • m_cd가 null의 경우 다음과 같이 A의 c_cd를 B와 결합한다.
  • m_cd가 0이 아니면 A의 m_cd와 B를 결합한다.

데이터 프레임의 withcolumn() 메소드에서 "when"및 "otherwise()"을 사용할 수 있으므로 데이터 프레임의 조인의 경우이를 수행 할 수있는 방법이 있습니다.

나는 이미 Union을 사용하여 이것을 수행했지만, 다른 옵션이 있는지 알고 싶습니다.

답변

4

당신은 조인 조건에서 "때"/ "그렇지 않으면"을 사용할 수 있습니다 : 아직 불구하고, 노동 조합을 사용하는 것이 더 읽을 수 있습니다

case class Foo(m_cd: Option[Int], c_cd: Option[Int]) 
val dfA = spark.createDataset(Array(
    Foo(Some(1), Some(2)), 
    Foo(Some(2), Some(3)), 
    Foo(None: Option[Int], Some(4)) 
)) 


val dfB = spark.createDataset(Array(
    Foo(Some(1), Some(5)), 
    Foo(Some(2), Some(6)), 
    Foo(Some(10), Some(4)) 
)) 

val joinCondition = when($"a.m_cd".isNull, $"a.c_cd"===$"b.c_cd") 
    .otherwise($"a.m_cd"===$"b.m_cd") 

dfA.as('a).join(dfB.as('b), joinCondition).show 

.

+0

위에서 언급 한 코드가 정상적으로 작동합니다 .. – Avijit

+0

if와 같은 여러 조건을 추가하려는 경우 else if,이 조건에 java 및 scala가없는 경우 (val joinCondition = when ($ "a.m_cd".isNull, $ "a ($ "a.m_cd"=== $ "b.m_cd")) 가능합니까 ?? – Avijit

+1

안녕하세요 @Avijit. 여러 개의 "언제"를 연결할 수 있습니다. "when"과 "else if"로 행동 할 수 있으므로 "when (condition1, value1) .when (cond2, val2) .otherwise (default)"를 수행 할 수 있습니다. – alghimo

관련 문제