我有一个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文本文件作为单个分区读取,因为默认情况下它读取为两个分区?
如果我死了就减少了洗牌?
答案 0 :(得分:0)
我认为你已经暗示可以广播的100MB文本了,所以当你将它作为连接的一部分使用时,spark会使用更快的Broadcast Join。
在这种情况下,我认为你不必过多担心num分区。事实上,我认为更多分区的广播速度会更快,因为Spark最新发布的版本默认使用bit-torrent protocol。
根据您的要求,您必须将spark.sql.autoBroadcastJoinThreshold
值提升至> 100M。请参阅此thread