我有两个DataFrames A和B:
A有(id, info1, info2)大约2亿行的列B只有id100万行的列该id列在两个DataFrame中都是唯一的.
我想要一个新的DataFrame,它过滤A只包含来自的值B.
如果B很小,我知道我会做的事情
A.filter($("id") isin B("id"))
Run Code Online (Sandbox Code Playgroud)
但B仍然很大,所以并非所有它都适合作为广播变量.
而且我知道我可以使用
A.join(B, Seq("id"))
Run Code Online (Sandbox Code Playgroud)
但这不会利用这种独特性,我担心会造成不必要的洗牌.
实现该任务的最佳方法是什么?
我已经阅读了很多有关如何在pyspark中进行有效联接的内容。我发现实现高效联接的方法基本上是:
最后一个是我想尝试的,但是我找不到在pyspark中实现它的方法。我试过了:
df.repartition(numberOfPartitions,['parition_col1','partition_col2'])
Run Code Online (Sandbox Code Playgroud)
但这无济于事,直到我停止它仍需要花费很长时间,因为在最后的几项工作中卡住了火花。
因此,如何在pyspark中使用相同的分区程序并加快连接速度,甚至摆脱永远需要的时间?我需要使用哪个代码?
PD:即使在stackoverflow上,我也查看了其他文章,但是我仍然看不到代码。