我正在一个Scala + Spark项目中工作,在该项目中,我们将数据从文件加载到PostgreSQL中。它在独立模式下使用jdbc.write在本地运行良好,测试数据很小。
但是由于生产数据是巨大的,我想使用一个集群,每个执行者拥有多个工作人员和一个逻辑处理器核心。
考虑到这一点,我如何在集群中的所有可用核之间划分数据?
谢谢!
PS:使用Scala2.13.9和Spark3.3.0
发布于 2022-10-13 05:27:19
如果您正在使用动态分配,并且您的集群被并发作业使用,那么可能很难得到与您的作业可能使用的核数目完全相等的分区数,因为您不会预先知道这个数目,并且无法动态计算它。
您可以尝试找出一些任意的数字,并将numPartitions jdbc参数设置为要在写时使用的分区数。使用此参数,Spark将在写入之前重新划分此数据集,您将得到写入上的任务数量等于numPartitions。记住,用并行=1 jdbc连接编写的每个任务都要注意,您可能会溢出您的PostreSQL。
numPartitions (none)表读取和写入中可用于并行处理的最大分区数。这也决定了并发JDBC连接的最大数量。如果要写入的分区数超过此限制,则在编写之前调用numPartitions将其减少到此限制。读写
https://stackoverflow.com/questions/74040660
复制相似问题