2017-02-01 13 views
1

두 개의 데이터 세트가 있습니다. 하나는 하이브에 저장되고 (작은 테이블은 조회 테이블로 사용됨) 다른 하나는 스파크 스트리밍에서 가져옵니다.Apache Spark의 lookup() 함수

이제이 두 데이터 집합에 대한 일부 작업을 수행해야합니다. 예를 들어

:

을 DataSet1 : (하이브에 저장됩니다)

id  name 
101 steve 
102 david 

dataset2 : 내가 스트리밍에서 101 E01 NewYork을받을 때마다

id deprt address 

101 E01 NewYork 
102 E02 London 

을 (스파크 스트리밍에서 오는) 두 개의 데이터 세트를 결합하여 다음과 같은 결과를 얻길 원합니다.

id name dept address 
101 steve E01 NewYork 

이전에, 브로드 캐스트 변수로이 유형의 작업을 수행했으며 하이브 검색 테이블을 사용하여이 작업을 exlpore하려고합니다.

아무쪼록이 방법을 제안 할 수 있습니까?

미리 감사드립니다.

답변

3

이미 하이브리드 테이블을 브로드 캐스트 변수로 사용하고 있으므로 하이브 검색 테이블이 작다고 가정하면 조회를 수행 할 수있는 하이브 테이블을 읽지 않고도 데이터 프레임을 만들 수 있습니다.

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) 
val lookupDF = hiveContext.sql("select * from your_hive_table").cache() //cache lookup data 


ds.transform { 
    rdd => 
     val df = rdd.toDF("c1","c2","c3") 
     df.join(lookupDF, lookupDF("col") === df("col")).select("co1","col2","col3").rdd 
} 
+0

그런 다음 스트림에서 foreachRDD를 수행하고 내부에서 'lookupDF' – LiMuBei