pyspark检查庞大列表中的元素

pyspark检查庞大列表中的元素,pyspark,Pyspark,我有一个中等大小的spark数据帧(比如10000到100000行),并且希望根据行是否在一个巨大的列表中(数千万长)来过滤行。我所做的是: sc.broadcast(huge_list) df = df.filter(df['some_col'].isin(huge_list)) 然而,演出相当缓慢。有没有一种有效的方法可以做到这一点?只需执行一个连接即可。 您可以将列表按行分解。然后,使用internal连接两个数据帧。结果应该更快 是的,它奏效了,但我不完全明白。当我执行我的原始代码时,

我有一个中等大小的spark数据帧(比如10000到100000行),并且希望根据行是否在一个巨大的列表中(数千万长)来过滤行。我所做的是:

sc.broadcast(huge_list)
df = df.filter(df['some_col'].isin(huge_list))

然而,演出相当缓慢。有没有一种有效的方法可以做到这一点?

只需执行一个
连接即可。

您可以将列表按行分解。然后,使用
internal
连接两个数据帧。结果应该更快

是的,它奏效了,但我不完全明白。当我执行我的原始代码时,pyspark外壳就永远卡住了。当我使用join时,至少舞台栏出现并开始进步。当isin发生在本地级别时,加入不涉及大量的网络洗牌吗?为什么加入更快?@YuchenHu基本上,如果你
播放你庞大的列表,它会被复制到每个工作节点上。因此,这一步请求的资源太多,您的流程就卡住了。