pyspark 将负载均匀地分配给所有执行程序

Posted

技术标签:

【中文标题】pyspark 将负载均匀地分配给所有执行程序【英文标题】:pyspark split load uniformly across all executors 【发布时间】:2017-10-06 02:15:00 【问题描述】:

我有一个 5 节点集群。我正在使用 pyspark 将 100k csv 文件加载到数据帧并执行一些 etl 操作并将输出写入 parquet 文件。 当我加载数据框时,如何将数据集均匀地划分给所有 executor os,每个 executor 处理 20k 条记录。

【问题讨论】:

你可以使用repartition(5) 【参考方案1】:

如果可能,请确保将输入数据拆分为较小的文件。 这样每个 executor 将读取和处理单个文件。

在无法修改输入文件的情况下,可以调用df.repartition(5),但请记住,这会导致昂贵的shuffle操作

【讨论】:

如您所说,添加重新分区需要更长的时间。我在想如果数据均匀分布在所有 5 个节点上,该过程将更快地完成。 df = sqlContext.read.format('com.databricks.spark.csv').load("/dwo_poc/rows.csv") dz=df.repartition(5) dz.show(100) 所以建议不要重新分区。看来shuffle的成本比并行和均匀分配负载的好处要贵。如果我的理解有误,请纠正我。 没有一个适合所有人的答案。最好尝试看看最适合您的工作量的方法

以上是关于pyspark 将负载均匀地分配给所有执行程序的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 将消息不均匀地分配给消费者

pyspark 负载分布不均匀,零件尺寸增加一倍

Google研究 | 使用一致的哈希算法分配临界负载

使用irqbalance服务实现中断负载均衡

Python 如何将长度不同的字符串尽量均匀地分配到N个文件中?每一行的字符串作为整体,不能打散。

负载均衡的起源