Apache nifi 如何在NiFi中找到两行的平均值?
我需要在单独的行中找到两个值的平均值 我的CSV文件如下所示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中预处理数据,然后将其导出到更适
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是一个不错的选择