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 将负载均匀地分配给所有执行程序的主要内容,如果未能解决你的问题,请参考以下文章