2017-04-08 7 views
0

동적으로 여러 열에 두 개의 스파크 - 스칼라 데이터 프레임을 결합하고 싶습니다. 다음 열에 열 이름 비교를 하드 코딩하지 않아야합니다.동적으로 조인 조건을 하드 코드하지 않고 여러 열에 두 개의 스파크 - 스칼라 데이터 프레임을 결합합니다.

val joinRes = df1.join(df2, df1("col1") == df2("col1") and df1("col2") == df2("col2")) 

이 쿼리에 대한 해결책은 이미 다음 링크에서 --provided pyspark 버전에 존재 PySpark DataFrame - Join on multiple columns dynamically

내가 사용하는 동일한 코드를 코드 싶습니다 스파크 스칼라 당신이 스칼라

답변

4

val sparkSession = SparkSession.builder().getOrCreate() 
import sparkSession.implicits._ 

val df1 = List("a,b", "b,c", "c,d").toDF("col1","col2") 
val df2 = List("1,2", "2,c", "3,4").toDF("col1","col2") 

val columnsdf1 = df1.columns 
val columnsdf2 = df2.columns 

val joinExprs = columnsdf1 
    .zip(columnsdf2) 
    .map{case (c1, c2) => df1(c1) === df2(c2)} 
    .reduce(_ && _) 

val dfJoinRes = df1.join(df2,joinExprs) 
+1

발 dfJoinRes = df1.join (DF2, df1.columns.toSet.intersect : 그것은 비슷한 방식으로하지만, 파이썬처럼 당신이지도를 사용하고 기능을 줄일 필요 (df2.columns.toSet) .toSeq, "left") //이 코드는 내 경우에도 작동합니다. – Anhata

+0

예, 작동합니다. 먼저 답변을 게시하고 싶었지만 df1의 열 df2의 이름이 다른가요? –