当前位置: 首页 > 知识库问答 >
问题:

将所有映射器中遇到的最大键作为参数传递给下一个作业

习狐若
2023-03-14

我有一系列Map/Reduce作业:

Job1将带有时间戳的数据作为键,将一些数据作为值并对其进行转换。

对于Job2,我需要传递Job1中所有映射器的最大时间戳作为参数。(我知道如何将参数传递给映射器/简化器)

我可以跟踪Job1的每个映射器中的最大时间戳,但如何在所有映射器中获得最大时间戳并将其作为参数传递给Job2呢?

共有1个答案

尉迟阳煦
2023-03-14

没有办法2个地图可以互相交谈,所以只有地图的工作(job1)不能得到你的全局最大值。然而,我可以想到以下两种方法。

我假设您的job1目前是一个仅有map的工作,并且您正在从map本身编写输出。

a.更改映射器,使用MultipleOutputs而不是Context或outputCollector写入主输出。使用Context.write()发出附加的(键,值)对作为(常量,时间戳)。这样,只将(常量,时间戳)对洗牌为reducer。添加一个对max进行caliculated的reducer。在接收到的值中。运行作业,将简化器的数量设置为1。从映射器写入的输出将给出原始输出,而从简化器写入的输出将给出全局最大值。时间戳。

B.在job1中,写出最大值。在每个映射器中的时间戳作为输出。您可以在cleanup()中这样做。使用MultipleOutputs写入原始输出以外的文件夹。一旦job1完成,假设在job1中有“X”个映射器,输出文件夹中就有“X”个部件文件。您可以在该文件夹上执行getmerge操作,将所有部件文件放到一个本地文件中。该文件将有“X”行,每行包含一个时间戳。您可以使用独立的java程序读取该文件,找到全局最大值。时间戳并将其保存在某个本地文件中。使用distrib缓存将该文件共享到job2或传递全局最大值。作为参数。

 类似资料:
  • 问题内容: 我有一个名为 buildall 的管道作业,如下所示: 该 buildall 作业有25个参数。我想将所有 buildall 的参数传递给 job1 。有没有一种简单的方法可以代替手动指定每个参数呢? 在此问题中:向下游作业传递管道参数是一个子问题,但从未得到回答: 甚至更好的是,有没有一种麻烦的方法可以将所有管道参数传递给下游作业。 我有同样的问题。 问题答案: 以下似乎有效(尽管我

  • 问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码:

  • 问题内容: 我正在使用具有集成交付管道功能(https://jenkins.io/solutions/pipeline/)的Jenkins v2.1 来编排两个现有构建(构建和部署)。 在我的参数化构建中,我有3个用户参数设置,也需要在管道中选择该参数。 管道脚本如下: 除以外,此方法均正常运行。当我构建管道时,会引发以下错误: 如何解决此类型转换错误?甚至更好的是,有没有一种麻烦的方式可以将所有

  • 问题内容: 我想将传递给function()的所有参数作为参数传递给内部的另一个function(), 这可以在被调用过程中完成并将它们传递给,但是还有另一种方法吗? 本来 但是如果我的func1签名是 我如何将它们全部发送到func2,而不使用 有没有一种方法像在javascript中? 问题答案: 显式比隐式更好, 但是如果您真的不想键入一些字符,请执行以下操作: 都是局部变量,因此您不能在调

  • 问题内容: 我正在创建一个分页类,需要将两个参数传递给我的LIMIT子句的MySQL存储过程。 我将它们作为INT传递给我,并尝试这样的事情 但是,当我尝试保存该存储过程时,它给了我一个错误。有什么方法可以让我错过吗?还是我必须评估整个查询并执行它? 问题答案: 在5.5.6之前的版本中,无法在MySQL存储过程中进行参数化。您需要动态构建查询并执行它。 在5.5.6及更高版本中,只要将存储的pr