2016-10-16 56 views
1

我有一個的大數據幀類似於過濾大量的ID從數據幀星火

+-----+------+------+ 
|ID |Cat |date | 
+-----+------+------+ 
|12 | A |201602| 
|14 | B |201601| 
|19 | A |201608| 
|12 | F |201605| 
|11 | G |201603| 
+-----+------+------+ 

的格式,我需要根據周圍5000000 ID的列表來過濾行。直截了當的方式是過濾isin,但這是非常糟糕的表現。這個過濾器如何完成?

+0

,如果你可以通過一些手段劃分您的數據,那麼你應該能夠更快地加入 –

回答

3

如果您致力於使用Spark SQL,並且isin不再擴展,那麼內部等值加入應該是一個體面的適合。

首先將id列表轉換爲單列DataFrame。如果這是一個本地集合

ids_df = sc.parallelize(id_list).map(lambda x: (x,)).toDF(["id"]) 

join

df.join(ids_df, ["ID"], "inner")