java - 在 Talend Open Studio for Data Integration 中一次处理一组行

标签 java mapreduce talend

我有一个数据源,其中每行有五个字段:

company name; year; code; value;

在我的目标输出行模型中,我想生成这样的行

company name;year;value1;value2;value3;value4

其中 value1,value..N 不是单个代码的串联,而是“映射”。 IE。代码 50 =>“总收入”

所以我需要执行以下逻辑:

  1. 首先选择同一公司名称/年份的所有记录
  2. 然后应用一些自定义 Java 逻辑来执行我的代码和输出行的字段之间的映射。

这是一个大约 1M 行的内存中映射缩减。在 Talend Open Studio for Data Integration 中应如何处理此问题?

最佳答案

您可以这样做,这本质上是 Maira Bay 已经建议的方法:

  1. 设置您的数据源以一次发出一行。我为此使用了 tFixedFlowInput 。您可能必须从文件中读取。
  2. 可以选择使用 tSortRow 按公司名称和年份进行排序。
  3. 使用 tMap 将每行的值映射到结果行中的相应列,并使用类似 input.code.equals("code for this column") 的保护子句?输入值:null
  4. 使用 tAggregateRow 聚合行,按公司名称和年份分组,为每个值行选择第一个值 - 但请确保忽略空值。
  5. 对结果行执行任何您想要的操作。

我用一些示例数据进行了尝试,因此在步骤 1 中使用了 tFixedFlowInput,并且它在我的 TOS 6.3.1 机器上有效。

请注意:所提出的解决方案假设您仅获得公司名称、年份和代码的每个组合的一个值。

关于java - 在 Talend Open Studio for Data Integration 中一次处理一组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43154211/

相关文章:

java - 同步和线程

java - 如何在 Java Maven 项目的命令提示符中执行 'project > clean'

java - Hadoop MapReduce : using MapWritable as a key

Talend tMSSQLInput

mysql - 如何在每个作业结束时在 talend 中实现日志记录?

java - 刷新时 Facebook SDK Android AppEventsLogger NullPointerException

java - 在路径中包含 Java 7 的服务器上使用 Play Framework 2.4+

MongoDB 最小/最大聚合

java - Hadoop Iterator 在第一次迭代时跳过方法调用

mysql - 将多个 CSV 文件加载到 MySQL 中