【问题标题】:Combine output of parallel operations using Scala使用 Scala 合并并行操作的输出
【发布时间】:2017-09-11 00:00:36
【问题描述】:

以下sn-p代码并行处理过滤器并将单个文件写入输出目录。有没有办法得到一个大的输出文件?

Array(
        (filter1, outputPathBase + fileName),
        (filter2, outputPathBase + fileName),
        (filter3, outputPathBase + fileName)   

      ).par.foreach {
        case (extract, path) => extract.coalesce(1).write.mode("append").csv(path)
      }

谢谢。

【问题讨论】:

    标签: scala apache-spark scala-collections


    【解决方案1】:

    您可以通过合并它们将数组简化为单个 RDD,这将并行执行 Spark 的每个过滤器*

    val rdd = Array(
            filter1
            filter2,
            filter3).reduce(_.union(_))
    
    rdd.write.mode("append").csv(path)
    

    在这种情况下,无需将Array 转换为ParArray

    我假设filter1filter2filter3 属于同一类型RDD[T]

    【讨论】:

    • 谢谢米克尔。我也试过了。但是,总执行时间的差异很大。使用我使用的方法,处理在 3 分钟内完成,使用联合的方法大约需要 18 分钟。
    • 你能分享更多关于filter1、filter2和filter3是什么的信息吗?
    • 我已经删除了合并(1),这将使并行化减少到 1
    • 所有过滤器都是同一类型的。我会试试这个。
    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    相关资源
    最近更新 更多