【问题标题】:Talend : tmap Nullpointer exception while merging two CSV filesTalend:合并两个 CSV 文件时出现 tmap Nullpointer 异常
【发布时间】:2014-09-10 07:42:50
【问题描述】:

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

例如

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

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

第二个 CSV 文件具有动态列。但它总是有 A(uid) 列。例如

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

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

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

这是工作。

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

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

要获取列名,当我检查输出文件中的“包含标题”选项时,会出现以下异常。

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 异常的原因。

为什么会这样?我将如何获得标题? 请告诉我如何实现这一目标。

【问题讨论】:

  • 我认为您遇到了一个错误,因为您无法控制如何将标头写入文件。我不能确定,因为我没有 TIS/付费版的副本,所以我无法复制。您是否已经尝试将表保存在测试数据库中?只是来看看是怎么回事?无论如何,AFAIK 在使用动态模式时,您的模式定义中只能有一列(动态一列)。但正如我所说,我无法测试:(
  • 有趣的是,我实际上只是构建了一些我意识到可以使用这个确切功能的东西,但它对我来说效果很好。你能检查一下你的动态列集中的所有列实际上都有一个标题吗?否则我猜头被设置为空,然后将动态数据写入分隔文件的方法需要一个非空头。
  • 所有列都有标题。为什么当我将包含标题设置为 true 时 tfileInputDelimited_2 获取单行?
  • 您能否在您的问题中编辑一些 2 tFileInputDelimited 组件配置的屏幕截图?

标签: java file talend


【解决方案1】:

将“其他列”作为 1 列动态类型读入文件。

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

然后注意在输出模式中只有一种动态类型,因为 talend 无法处理两种。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 2015-04-23
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多