相关疑难解决方法(0)

如何在唯一键上加入DataFrames时避免shuffle?

我有两个DataFrames AB:

  • 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)

但这不会利用这种独特性,我担心会造成不必要的洗牌.

实现该任务的最佳方法是什么?

apache-spark apache-spark-sql

16
推荐指数
3
解决办法
1万
查看次数

高效的pyspark加入

我已经阅读了很多有关如何在pyspark中进行有效联接的内容。我发现实现高效联接的方法基本上是:

  • 如果可以,请使用广播加入。(我通常不能,因为数据帧太大)
  • 考虑使用非常大的群集。(我宁愿不是因为$$$)。
  • 使用相同的分区程序

最后一个是我想尝试的,但是我找不到在pyspark中实现它的方法。我试过了:

df.repartition(numberOfPartitions,['parition_col1','partition_col2'])
Run Code Online (Sandbox Code Playgroud)

但这无济于事,直到我停止它仍需要花费很长时间,因为在最后的几项工作中卡住了火花。

因此,如何在pyspark中使用相同的分区程序并加快连接速度,甚至摆脱永远需要的时间?我需要使用哪个代码?

PD:即使在stackoverflow上,我也查看了其他文章,但是我仍然看不到代码。

apache-spark pyspark

3
推荐指数
1
解决办法
1419
查看次数

标签 统计

apache-spark ×2

apache-spark-sql ×1

pyspark ×1