我需要在不同的行中找到兩個值的平均值。如何在NiFi中查找兩條線的平均值?
我的CSV文件看起來像這樣
Name,ID,Marks
Mahi,1,90
Mahi,1,100
Andy,2,85
Andy,2,95
現在我需要的是平均2馬克存儲在數據庫中。 「平均」一欄應增加兩個商標並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馬克存儲在數據庫中。 「平均」一欄應增加兩個商標並2和商店,導致SQL查詢劃分
表:
Name,ID,Average
Mahi,2,95
Andy,2,90
是否可以找到採用NiFi在單獨的行中的兩個值的平均值?
給定很多的假設,這是可行的。您最好在NiFi中預處理數據並將其導出到更適合此工具的工具,如使用NiFi Spark Receiver庫(instructions here)的Apache Spark,因爲此解決方案不能很好地擴展。
但是,你當然可以使用SplitText
處理器的組合,以獲得正確的數據到個人flowfiles(即所有馬希行於一體,所有安迪排在其他)。一旦你有一個紀錄,看起來像:
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就是要走的路。