Apache NiFi:将具有多个列的csv映射以创建新行

时间:2019-11-07 04:06:34

标签: csv apache-nifi data-processing

我在堆栈溢出时发现了similar question。这种方法仅适用于几列,但是我意识到这种方法对于包含大量列的csv是不可能的。

我有一个75列的csv。我决定关注this approach(与上述链接相同)。按照要求在那个问题上做。我添加了UpdateRecord处理器,并添加了CSVReaderCSVWriter。然后,如所告知,我输入了SchemaText这很长,因为它需要我定义整个70列。然后告诉CSVRecordSetWriterinvalid

在实现了一定数量的列定义后,我意识到它变成了invalid

部分架构如下:

{
   "type":"record",
   "name":"test2.csv",
   "namespace":"my.namespace",
   "fields":[
      {
         "name":"download",
         "type":"string"
      },
      {
         "name":"upload",
         "type":"string"
      }
      .
      .
      .
      .
      {
         "name":"operatorId",
         "type":"string"
      },
      {
         "name":"errorCode",
         "type":"string"
      }      
   ]
}

我的csv也包含标头。

目标: 我需要将errorCode列中的数据映射到名为errorMean的新列。希望您能提出一种我可以实现的方法。随意给出一个解决方案,甚至可以完全跳过写下Schema Text的过程。

1 个答案:

答案 0 :(得分:2)

  

我在堆栈溢出中发现了类似的问题。这种方法有效   只需几列就可以了,但是我意识到这种方法不是   具有大量列的csv可能是这样。

为避免提供非常大的架构,请将CSVReader's Schema Access Strategy设置为Infer Schema,将CSVRecordSetWriter's Schema Access Strategy设置为Inherit Record Schema。因此,当读取CSV时,将推断出该架构。然后,将使用相同的架构来编写CSV。

enter image description here

其余映射与您链接的答案中所述的相同。