32

두 개의 다른 RDD의 데이터 세트를 연결하는 방법이 있습니까?아파치 스파크에서 서로 다른 RDD의 데이터 세트를 스칼라로 연결하기

요구 사항 - 같은 열 이름을 가진 스칼라를 사용하여 두 개의 중간 RDD를 만들고 두 RDD의 결과를 결합하여 UI에 액세스하기위한 결과를 캐시해야합니다. 어떻게 데이터 세트를 여기에 결합합니까?

RDDs 유형 spark.sql.SchemaRDD

+1

'++ '를 사용할 수 없습니까? – lmm

+1

@lmm No .. RDD에 열을 추가합니다. RDD에 행을 추가해야합니다. 하나의 RDD에 레코드를 병합해야하는 동일한 열이있는 두 개의 RDD가 있습니다. – Atom

+1

아니, 나는 방금 그것을 시도했다. '++'는 두 결과 모두를 가진 결합 RDD를 생성합니다. – lmm

답변

43

난 당신이 (스파크 쉘에) RDD.union

val rddPart1 = ??? 
val rddPart2 = ??? 
val rddAll = rddPart1.union(rddPart2) 

예를 찾고 생각

val rdd1 = sc.parallelize(Seq((1, "Aug", 30),(1, "Sep", 31),(2, "Aug", 15),(2, "Sep", 10))) 
val rdd2 = sc.parallelize(Seq((1, "Oct", 10),(1, "Nov", 12),(2, "Oct", 5),(2, "Nov", 15))) 
rdd1.union(rdd2).collect 

res0: Array[(Int, String, Int)] = Array((1,Aug,30), (1,Sep,31), (2,Aug,15), (2,Sep,10), (1,Oct,10), (1,Nov,12), (2,Oct,5), (2,Nov,15)) 
+0

rddPart1.union (rddPart2)은 rddPart2에 rddPart1의 열을 추가합니다. rddPart1 행에 rddPart2 행을 추가해야합니다. 참고로이 경우 두 RDD는 동일한 열 이름과 유형을가집니다. – Atom

+0

기존의 RDD에 레코드를 삽입하는 것과 같습니다. RDD에 새로운 열을 생성하지 않음 – Atom

+2

@example은 예제를 추가했습니다. 노조 RDD에는 새로운 열이 없습니다. – maasg