繁体   English   中英

pyspark - spark - 如何使用 RDD 创建并行多阶段任务

[英]pyspark - spark - how to create a parallel multistage task using RDD

我正在使用 python 并想创建一个如下的工作:1.该工作有 n 个可以并行发生的部分。 2.每个部分有m个需要顺序的子部分

我希望 spark 为我管理容错,因此我尝试使用 RDD,问题是我没有找到创建“二维”RDD 的方法,只有平面的。

有没有办法用spark和pyspark做到这一点?

我需要它来处理故障,并保持平行。

也许某种方式使用常规 RDD 并强制某些工作先于其他工作发生? 也许更像是等待?

我想我可以创建 n 个线程,每个线程运行它自己的 RDD 但这似乎有点生硬......

谢谢

有两种我熟悉的方法可以将多线程添加到您的工作中。

1. 假设您有一个带有 X 个分区的 RDD,并且每个分区都有 ~Y 个元素。 您的 RDD 是 RDD[A] 并且您想将其转换为 RDD[B],但是转换 A->B 有点重并且需要时间。 而是使用常规 RDD[A].map(A=>transform(A)) 迭代分区序列中的每一行,您可以使用 mapPartition 为您提供 List[A](每个分区中的元素),您可以创建一个多线程变换就行了,这样可以节省时间。 *注意:mapPartitions 给你一个迭代器,所以将它收集到 List 会将所有元素带到内存中,要小心。

2. 假设您已经完成了 ETL,您已经缓存了 RDD[A],现在您想将其写入 3 个不同的日期源(我希望您将使用 kafka,但可以说这就是场景)。

而不是做:

RDD[A].saveToDataSource1
RDD[A].saveToDataSource2
RDD[A].saveToDataSource3

并按顺序进行,您可以在此处使用多线程并并行执行。 例如,如果您从 3 个不同的数据源读取数据,然后将它们联合起来,您也可以这样做。

这是我看到的两种情况,当多线程可以在 spark 中帮助您时,所有其他选项,spark 已经尽可能地处理它们以保持并行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM