示例输入
以下是我输入的一个示例。如您所见,地址列有2个值,我想将它们分开,然后组合成一个值。
预期输出
这是输出应该是什么,将值合并到一个单元格中。
Talend输出
如果我将数据读入Talend,它看起来像这样:
答案 0 :(得分:3)
您应该可以通过在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;
注意我是如何将非空名称行的名称设置为“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|
'-----------+---------------------------+---------------------'