【问题标题】:pyspark - spark - how to create a parallel multistage task using RDDpyspark - spark - 如何使用 RDD 创建并行多阶段任务
【发布时间】:2019-12-02 13:50:32
【问题描述】:

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

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

spark 和 pyspark 有什么办法吗?

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

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

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

谢谢

【问题讨论】:

    标签: python algorithm apache-spark pyspark


    【解决方案1】:

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

    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 已经尽可能地处理它们以实现并行。

    【讨论】:

    • 你能提供一个工作代码示例吗?这似乎很有希望
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2020-09-22
    相关资源
    最近更新 更多