2016-10-16 30 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")