样本输入
这是我输入的一个例子。如您所见,地址列有 2 个值,我想将它们分开然后合并为一个值。
预期产出
这就是输出应该是什么,将值合并到一个单元格中。
Talend 输出
如果我将数据读入 Talend,它看起来像这样:
您应该能够通过使用 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;
Run Code Online (Sandbox Code Playgroud)
请注意我如何将非空名称行的名称设置为“DELETE THIS ROW”。然后我可以使用 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|
'-----------+---------------------------+---------------------'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5384 次 |
最近记录: |