Apache nifi 如何在NiFi中找到两行的平均值?

Apache nifi 如何在NiFi中找到两行的平均值?,apache-nifi,Apache Nifi,我需要在单独的行中找到两个值的平均值 我的CSV文件如下所示 Name,ID,Marks Mahi,1,90 Mahi,1,100 Andy,2,85 Andy,2,95 现在我需要在数据库中存储平均2个标记。 “Average”列应添加两个标记并用2除,并将结果存储在SQL查询中 表: Name,ID,Average Mahi,2,95 Andy,2,90 是否可以使用NiFi在单独的行中找到两个值的平均值?如果有很多假设,这是可行的。您最好先在NiFi中预处理数据,然后将其导出到更适

我需要在单独的行中找到两个值的平均值

我的CSV文件如下所示

Name,ID,Marks
Mahi,1,90
Mahi,1,100


Andy,2,85
Andy,2,95
现在我需要在数据库中存储平均2个标记。 “Average”列应添加两个标记并用2除,并将结果存储在SQL查询中

表:

Name,ID,Average
Mahi,2,95
Andy,2,90
是否可以使用NiFi在单独的行中找到两个值的平均值?

如果有很多假设,这是可行的。您最好先在NiFi中预处理数据,然后将其导出到更适合的工具中,比如使用library(),因为此解决方案无法很好地扩展

但是,您当然可以使用
SplitText
处理器的组合将适当的数据获取到各个流文件中(即一个流文件中的所有Mahi行,另一个流文件中的所有Andy行)。一旦您有一个如下所示的记录:

Andy,1,85
Andy,1,95
您可以将
ExtractText
与正则表达式一起使用,将
85
95
转换为属性
标记。1
标记。2
(一个很好的例子说明了缩放将被分解——使用两行进行此操作很容易;使用100k进行此操作是荒谬的)。然后可以使用表达式语言使用
UpdateAttribute
计算这两个属性的平均值(首先转换
toNumber()
),并填充第三个属性
marks.average
(通过链接
plus()
divide()
函数或(使用Java反射))。在属性中获得所需结果后,使用
ReplaceText
更新流文件内容,并使用
MergeContent
将各个流文件合并回单个实例

如果是我,我会首先评估传入数据格式的静态性,如果保证保持不变,可能只需编写一个Groovy脚本,解析数据并计算出相应的平均值。我认为,由于编写特定于域的代码的灵活性,这种方法甚至可以更好地扩展(在合理范围内)。如果您需要将其转移到集群操作中,Spark是一个不错的选择