gpt4 book ai didi

hadoop - 在没有 map 和 reduce 的情况下使用 Spark 进行顺序的逐行处理

转载 作者:可可西里 更新时间:2023-11-01 14:22:25 30 4
gpt4 key购买 nike

我正在研究 Spark 作为一种可能的计算工具,但无法找到我想到的用例示例。我想做的与 map 和 reduce 有点相反(至少在第一步),这可能使 Spark 成为这项工作的错误工具,所以在我忽略它之前,我想在这里检查是否有人有一些好主意,如果这个可以做到。

数据流看起来像这样:

  1. 想法是将一个巨大的表格结构作为输入,然后将其拆分到计算节点集群(它可以作为文本文件加载,也可以在数据库中)
  2. 对于此输入结构中的每一行,都会有一个逻辑来对行的内容进行分类(例如,如果它是抵押贷款、经常账户或其他东西)
  3. 分类后开始计算给定类别的分期付款。现在,问题来了——我不确定 Spark 是否可以执行这种计算:一个输入行可能会产生数百行结果行,例如最少 4 列:原始行的 ID、日期、金额 1、金额 2
  4. 将输出保存到一个新表中
  5. 然后,将新表与其他几个表合并,并在结果上应用 map 和 reduce

当然,计算应该在计算节点上完成,因此它可以并行工作,我想只移动一次数据——这意味着输入表的单个 block 将仅由单个节点。

这可行吗?如果不是,是否有替代方案可用于此目的并与 Spark 集成?

最佳答案

您列出的所有内容都非常适合 Spark 的典型流程。

  1. 您并行化/分区您的输入。如何:
    1. 您可以简单地输入一个 Java 元素列表 JavaSparkContext.parallelize(...) ,API 会处理剩下的事情。您可以选择输入一个附加参数,告诉您要并行化的程度。
    2. 使用SparkContext.readFile(...)读取和并行化文件,生成字符串的 RDD。您可以通过执行额外的 String.split(...) 进一步将其拆分为列或其他内容和 JavaRDD.map(...) .
    3. 其他 API,例如用于数据库读取的 JDBCRDD,
    4. 从非并行数据开始,并使用 JavaRDD.repartition(...)将数据拆分到下游。
  2. 分类 = JavaRDD.map(...) .
  3. 1 行到 x 行 = JavaRDD.flatMap(...) .
  4. 使用 JavaRDD.foreachPartition(...) 执行并行并发插入(如果您的数据库可以支持,Oracle 可以)。只需确保您执行批量插入,而不是 x 个单独的插入(批量与一次提交的 x 次插入相同)。

这都是非常典型的 Spark 编码,可以从 Spark Programming Guide 中读取.您可以在 Java/Scala/Python 之间切换文档。

对于提供所有带有 JavaDoc 链接的信息,我深表歉意。起初我没有注意到您的问题是特定于 Python 的。然而,这仍然适用,API 已完全映射到 Python(至少大部分,并且可能有一些改进)。

如果我能给你一个很好的建议:在为你提供上下文相关帮助和自动完成的下降 IDE 中工作。它一定会帮助您发现哪些方法适合您。

关于hadoop - 在没有 map 和 reduce 的情况下使用 Spark 进行顺序的逐行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370826/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com