读取100 MB的文件作为单个分区而不是默认的2个分区是否合适?

时间:2018-04-03 13:47:09

标签: apache-spark

我有一个100 MB的文本文件。我正在读取该文件并转换为数据帧并缓存它。缓存的数据框有两个不同的执行程序分区

我的缓存原因是,缓存数据帧由我的spark应用程序中发生的100个动作使用

这100个动作将读取不同的文件,并且还使用缓存的数据框来加入一些连接

我的群集大小是100个节点,每个节点40 GB,每个24个核心

我在spark-submit命令中的配置在

之下
MASTER_URL=yarn-cluster
NUM_EXECUTORS=10
EXECUTOR_MEMORY=4G
EXECUTOR_CORES=6
DRIVER_MEMORY=3G

我的问题是

我是否需要将100 MB文本文件作为单个分区读取,因为默认情况下它读取为两个分区?

如果我死了就减少了洗牌?

1 个答案:

答案 0 :(得分:0)

我认为你已经暗示可以广播的100MB文本了,所以当你将它作为连接的一部分使用时,spark会使用更快的Broadcast Join

在这种情况下,我认为你不必过多担心num分区。事实上,我认为更多分区的广播速度会更快,因为Spark最新发布的版本默认使用bit-torrent protocol

根据您的要求,您必须将spark.sql.autoBroadcastJoinThreshold值提升至> 100M。请参阅此thread