Talend:合并两个CSV文件时tmap Nullpointer异常

时间:2014-09-10 07:42:51

标签: java file talend

我想合并两个CSV文件。我面临的问题是两个CSV文件中的一个具有动态列。

e.g。

第一个CSV文件有两列。 A和G.列G有逗号分隔值。

A | G       |<-Column Names
--|---------|
A1| G1,G2,G3| <-Row
A2| G2,G5,G6|<-Row

MainCSv

第二个CSV文件包含动态列。但它将有A列(uid)。 e.g。

A | C1    |C2       |Othercolumns|<-Column Names
--|-------|---------|------------|
A1|C1Value|C2Value  |            |<-Row
A2|C1Value| C2Value |            |<-Row

Lookup CSV

我想合并这两个文件所以输出将是:

A |G          | C1    |C2       |Othercolumns|<-Column Names
--|-----------|-------|---------|------------|
A1| G1,G2,G3  |C1Value|C2Value  |            |<-Row
A2| G2,G5,G6  |C1Value| C2Value |            |<-Row

enter image description here

这是工作。

enter image description here

我没有检查tfileoutputdelimited_1中的include header选项。 这会正确合并csv文件,但不会带来第二个CSV文件的列信息(一个带有动态列)。输出如下所示。

A |G          |       |         |            |
--|-----------|-------|---------|------------|
A1| G1,G2,G3  |C1Value|C2Value  |            |<-Row
A2| G2,G5,G6  |C1Value| C2Value |            |<-Row

要获取列名称,当我选中&#34; include Header&#34;输出文件中的选项我得到以下异常。

java.lang.NullPointerException
at routines.system.DynamicUtils.writeHeaderToDelimitedFile(DynamicUtils.java:72)
at content.csvmergetest_0_1.CSVMergeTest.tFileInputDelimited_2Process(CSVMergeTest.java:2696)
at content.csvmergetest_0_1.CSVMergeTest.runJobInTOS(CSVMergeTest.java:3109)
at content.csvmergetest_0_1.CSVMergeTest.main(CSVMergeTest.java:2975)

如下所示,在这种情况下,只从Tfileinputdelimited_2获取一行。我猜这行是标题列,这就是nullpointer异常的原因。 enter image description here

为什么会这样?我如何获得标题? 请让我知道如何实现这一目标。

1 个答案:

答案 0 :(得分:0)

使用“othercolumns”读入文件,作为Dynamic类型的1列。 enter image description here

在加入tMap之前,您需要从中提取A列: enter image description here

然后注意在输出模式中只有一个动态类型,因为talend不能处理两个。 enter image description here

包含一个标题行和1个“othercolumns”colum Z的结果文件如下所示:

A;G;C1;C2;Z
A1;G1,G2,G3;C1Value;C2Value;Z1
A2;G2,G5,G6;C1Value;C2Value;Z2