如何在 NiFi 中找到两条线的平均值?
How to find average of two lines in NiFi?
我需要在不同的行中求两个值的平均值。
我的 CSV 文件如下所示
Name,ID,Marks
Mahi,1,90
Mahi,1,100
Andy,2,85
Andy,2,95
现在我需要将 2 分的平均值存储在数据库中。
"Average" 列应添加两个标记并除以 2 并将结果存储在 SQL 查询
中
Table:
Name,ID,Average
Mahi,2,95
Andy,2,90
是否可以使用 NiFi 求出不同行中两个值的平均值?
鉴于 很多 的假设,这是可行的。您最好在 NiFi 中预处理数据并将其导出到更适合此的工具,例如 Apache Spark using the NiFi Spark Receiver library (instructions here),因为此解决方案无法很好地扩展。
但是,您当然可以使用 SplitText
处理器的组合来将正确的数据放入单独的流文件中(即所有 Mahi 行合而为一,所有 Andy 行在另一个)。一旦你有一个看起来像这样的记录:
Andy,1,85
Andy,1,95
您可以将 ExtractText
与正则表达式一起使用,以将 85
和 95
转化为属性 marks.1
和 marks.2
(这是缩放比例的一个很好的例子分解——用 2 行做这个很容易;用 100k 做这个是荒谬的)。然后,您可以将 UpdateAttribute
与表达式语言一起使用来计算这两个属性的平均值(首先转换 toNumber()
)并填充第三个属性 marks.average
(通过链接 plus()
和divide()
函数或使用 math
advanced operation(使用 Java 反射))。在属性中获得所需结果后,使用 ReplaceText
更新流文件内容,并使用 MergeContent
将各个流文件合并回单个实例。
如果是我,我会首先评估我的传入数据格式的静态程度,如果保证保持不变,可能只需编写一个 Groovy 脚本来解析数据并计算平均数到位。我认为这甚至可以更好地扩展(在合理范围内),因为编写特定于域的代码具有灵活性。如果您需要将其卸载到集群操作,Spark 是您的不二之选。
我需要在不同的行中求两个值的平均值。
我的 CSV 文件如下所示
Name,ID,Marks
Mahi,1,90
Mahi,1,100
Andy,2,85
Andy,2,95
现在我需要将 2 分的平均值存储在数据库中。 "Average" 列应添加两个标记并除以 2 并将结果存储在 SQL 查询
中Table:
Name,ID,Average
Mahi,2,95
Andy,2,90
是否可以使用 NiFi 求出不同行中两个值的平均值?
鉴于 很多 的假设,这是可行的。您最好在 NiFi 中预处理数据并将其导出到更适合此的工具,例如 Apache Spark using the NiFi Spark Receiver library (instructions here),因为此解决方案无法很好地扩展。
但是,您当然可以使用 SplitText
处理器的组合来将正确的数据放入单独的流文件中(即所有 Mahi 行合而为一,所有 Andy 行在另一个)。一旦你有一个看起来像这样的记录:
Andy,1,85
Andy,1,95
您可以将 ExtractText
与正则表达式一起使用,以将 85
和 95
转化为属性 marks.1
和 marks.2
(这是缩放比例的一个很好的例子分解——用 2 行做这个很容易;用 100k 做这个是荒谬的)。然后,您可以将 UpdateAttribute
与表达式语言一起使用来计算这两个属性的平均值(首先转换 toNumber()
)并填充第三个属性 marks.average
(通过链接 plus()
和divide()
函数或使用 math
advanced operation(使用 Java 反射))。在属性中获得所需结果后,使用 ReplaceText
更新流文件内容,并使用 MergeContent
将各个流文件合并回单个实例。
如果是我,我会首先评估我的传入数据格式的静态程度,如果保证保持不变,可能只需编写一个 Groovy 脚本来解析数据并计算平均数到位。我认为这甚至可以更好地扩展(在合理范围内),因为编写特定于域的代码具有灵活性。如果您需要将其卸载到集群操作,Spark 是您的不二之选。