我現在有一個大的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會更快嗎?
看到使用廣播變量'地圖邊join':https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-broadcast.html#Introduction – maasg
@maasg,感謝您的反饋,似乎已經提高了性能。 – mongolol