2017-03-17 53 views
3

我有一组4列的csv数据,其中第一列的记录具有相同的5行值。然后,对于接下来的5行的第一列,值再次保持相同,依此类推。使用NiFi处理器对csv数据进行分组

的样本数据:

a,21,51,xxx 
a,22,52,xxx 
a,23,53,xxx 
a,24,54,xxx 
a,25,55,xxx 
b,21,61,yyy 
b,22,62,yyy 
b,23,63,yyy 
b,24,64,yyy 
b,25,65,yyy 
........... 

但有时记录进来随意为:

a,21,51,xxx 
a,22,52,xxx 
a,23,53,xxx 
b,21,61,yyy 
b,22,62,yyy 
a,24,54,xxx 
a,25,55,xxx 
b,23,63,yyy 
b,24,64,yyy 
b,25,65,yyy 
........... 

有基于使用NiFi处理器的第一列分组这样的数据的方法吗?

任何答案会有帮助。

感谢

+0

你想要组的行如果行的第一列这是你的用例吧? –

+0

是的这是我的用例 –

回答

3

你应该能够使用分组正则表达式RouteText处理器,它说,要做到这一点:

“正则表达式,以评估对每一行 确定哪个组该行应该被放入。常规 表达式必须至少有一个捕获组,用于定义 行的组。如果常规 表达式中存在多个捕获组,则所有捕获组中的组不会有两行放置在相同的FlowFile中,除非它们都具有相同的值 (或两行都不匹配正则表达式)。例如,要将第一个 列中的CSV文件中的所有行组合到一起,我们可以将此值设置为“(。?),。”。这有 同一集团,但不同的关系两条线将永远不会被放置到 相同FlowFile。”

我想你可以使用结合的匹配正则表达式,只需使用一个匹配策略。*为该表达式以便每行匹配。

然后,对于分组表达式由所述第一列中使用上面的例子中,以组(?),.

+0

我使用了上述解决方案,但几乎没有变化。对于我使用的分组表达式:(。*?),。* –

+0

非常感谢您的及时帮助。 –