从数据帧Spark中过滤大量ID

Iva*_*van 2 python apache-spark pyspark

我有一个大型数据帧,格式类似于

+-----+------+------+
|ID   |Cat   |date  |
+-----+------+------+
|12   | A    |201602|
|14   | B    |201601|
|19   | A    |201608|
|12   | F    |201605|
|11   | G    |201603|
+-----+------+------+
Run Code Online (Sandbox Code Playgroud)

我需要根据一个包含大约5000万个ID的列表来过滤行.直截了当的方式是过滤isin但是性能非常糟糕.如何完成此过滤器?

use*_*411 5

如果您致力于使用Spark SQL并且isin不再扩展,则内部equi-join应该是合适的.

首先将id列表转换为单列DataFrame.如果这是本地收藏

ids_df = sc.parallelize(id_list).map(lambda x: (x, )).toDF(["id"])
Run Code Online (Sandbox Code Playgroud)

并且join:

df.join(ids_df, ["ID"], "inner")
Run Code Online (Sandbox Code Playgroud)