2015-06-03 56 views
0

不久前,我問了一個關於使用多個鍵組織和構造RDD的問題。見PySpark Suggestion on how to organize RDDPySpark使用函數創建多重索引配對RDD

在我目前RDD每個對象都包含一個start_timeend_timeidposition。我想分組idtime。如果兩個或多個對象具有相同的id或任何重疊時間,我會將它們組合在一起。

尋找重疊的邏輯非常簡單:

if x1.start_time > x2.start_time and x1.start_time < x2.end_time 
if x2.start_time > x1.start_time and x2.start_time < x2.end_time 

我只是不完全得到如何去使用這個邏輯創建配對RDD雖然。

任何建議將不勝感激,謝謝!

回答

1

我認爲最簡單的方法是使用ID連接,然後過濾結果(如果使用相同的ID沒有太多)。爲此,我首先將RDD映射到(id,record),然後進行連接。

+0

感謝您的回覆!不幸的是,有很多具有相同ID的對象。一個問題 - 你的意思是「要做到這一點,我首先將RDD映射到(id,record),然後再做** filter **」? – archeezee

+0

嗯,我們不能在加入之前做一個過濾器,因爲你的過濾條件取決於看時間戳。如果你有很多具有相同想法的對象,使得具有相同id的對象的交叉積太大,那麼我認爲下一個最合理的方法是做cogroup,然後用你的連接邏輯做一個平面圖。 – Holden

+1

Ahhh我明白了,那麼你是在暗示我這樣cogroup:'rdd.map(lambda x:(x.id,(x.startTime(),x.endTime(),[x])))'? – archeezee