2016-11-15 40 views
0

我現在有一個大的RDD包含表單的數據稱爲chartEvents SQL:的最有效途徑加入塊狀/小型數據集

CSVUtils.loadCSVAsTable(sqlContext, "data_unzipped/CHARTEVENTS.csv") 
val chartEvents = sqlContext.sql(
    """ 
    |SELECT SUBJECT_ID, ITEMID, CHARTTIME, STORETIME, VALUE, VALUENUM, WARNING, ERROR 
    |FROM CHARTEVENTS 
    """.stripMargin) 
    .map(r => ChartEvent(r(0).toString, r(1).toString, r(2).toString, r(3).toString, r(4).toString, 
    r(5).toString, r(6).toString, r(7).toString)) 

我有一個單獨的,非常小(小於100行)RDD稱爲形式RDD[(itemID, label)]其中,這些都是字符串的featureMapping。我想要做的是將chartEvents RDD過濾爲只包含featureMapping中的itemID的行。我目前的方法是進行內部連接兩個RDDS如下:

val result = chartEvents.map{case event => (event.itemID, event)}.join(featureMapping) 

然而,我注意到,這是軌道上需要幾個小時的運行,並在使用的空間巨量我/user/<user>/appdata/local/temp文件夾。是否有更有效的方法來執行此過濾?將它編入sqlContext會更快嗎?

+0

看到使用廣播變量'地圖邊join':https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-broadcast.html#Introduction – maasg

+0

@maasg,感謝您的反饋,似乎已經提高了性能。 – mongolol

回答

2

如果註冊表格中蜂巢metastore你可以從設置spark.sql.autoBroadcastJoinThreshold

doc

配置的最大字節數執行時會 廣播到所有工作節點的表加入。通過將此 值設置爲-1,可以禁用廣播。請注意,當前 統計信息僅支持Hive Metastore表,其中 命令ANALYZE TABLE COMPUTE STATISTICS noscan已被 運行。

+0

蜂房Metastore是我不熟悉的東西。感謝鏈接,我會閱讀它。 – mongolol