【问题标题】:Talend - Combining two rows into oneTalend - 将两行合二为一
【发布时间】:2014-12-25 18:25:08
【问题描述】:

示例输入

这是我输入的一个示例。如您所见,地址列有 2 个值,我想将它们分开然后合并为一个值。

预期输出

这就是输出应该是什么,将值组合到一个单元格中。

Talend 输出

如果我将数据读入 Talend,它看起来像这样:

【问题讨论】:

  • 我认为这是一个合并单元格的 Excel 工作表?如果您读入它,它在 Talend 中的外观如何。您应该能够像往常一样配置您的输入组件,然后使用 tLogRow 或右键单击输入组件,然后单击数据查看器以查看它是如何读入的跨度>
  • 是的。我的输入是一个excel文件。输出是相同的,但在 Name 列上,示例 John Carter 采用一个单元格,其底部是空白单元格。
  • 好的,您能否编辑您的问题以包括 Talend 如何读取它?我已经离开 PC 好几天了,但如果没有人能打败我,我会在回来时提供答案
  • 我已经编辑了这个问题。好的。我会等你的回复

标签: talend


【解决方案1】:

您应该能够通过使用 Talend 中的 tMemorizeRows 组件来完成此操作。

一个非常粗略的示例作业可能如下所示:

我在这里使用 tFixedFlowInput 对一些数据进行硬编码,而不是在 Excel 表中读取,但它应该与您在问题中作为示例提供的内容相匹配:

tMemorizeRows 组件始终在内存中保留指定数量的行,而不是像往常一样在流中逐行处理事物(尽管某些组件会要求整个数据集都在内存中,例如进行排序)。然后可以将其作为数组访问。您只想将其设置为记住所有列,并且您始终只需要 2 行内存:

在这种情况下,当您的名称为空时,您需要将前一行的所有数据拉入下一行,以便我们可以使用以下示例代码使用 tJavaRow 访问 tMemorizeRows 组件保存的数据(快速破解一起):

String name = "";
String address = input_row.address;
String mailingAddress = input_row.mailing_address;

if ("".equals(input_row.name)) {
    name = name_tMemorizeRows_1[1];
    address = address_tMemorizeRows_1[1] + " " + input_row.address;
    mailingAddress = mailing_address_tMemorizeRows_1[1] + " " + input_row.mailing_address;
} else {
    name = "DELETE THIS ROW";
    address = input_row.address;
    mailingAddress = input_row.mailing_address;
}

output_row.name = name;
output_row.address = address;
output_row.mailing_address = mailingAddress;

请注意我如何将非空名称行的名称设置为“删除此行”。然后我可以使用 tFilterRow 从流中删除这一行,这样我们就只剩下我们想要的输出了:

给我们留下以下输出:

.-----------+---------------------------+---------------------.
|                           Output                            |
|=----------+---------------------------+--------------------=|
|name       |address                    |mailing_address      |
|=----------+---------------------------+--------------------=|
|John Carter|Washington Street USA 12345|PO Box 999 USA 12345 |
|Linda Green|London Road UK E20 2ST     |PO Box 998 UK E20 2ST|
'-----------+---------------------------+---------------------'

【讨论】:

  • 如果地址有 3 个值,那么名称有 2 个空格怎么办?
  • 总是 3 还是动态的?如果它总是 3,那么只需调整答案以适应。如果它是动态的,那么您可能需要做更多的工作。
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 2015-12-30
  • 2019-05-26
  • 2012-10-21
  • 1970-01-01
相关资源
最近更新 更多