2017-02-21 28 views
1

我需要在不同的行中找到兩個值的平均值。如何在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在單獨的行中的兩個值的平均值?

回答

3

給定很多的假設,這是可行的。您最好在NiFi中預處理數據並將其導出到更適合此工具的工具,如使用NiFi Spark Receiver庫(instructions here)的Apache Spark,因爲此解決方案不能很好地擴展。

但是,你當然可以使用SplitText處理器的組合,以獲得正確的數據到個人flowfiles(即所有馬希行於一體,所有安迪排在其他)。一旦你有一個紀錄,看起來像:

Andy,1,85 
Andy,1,95 

可以使用ExtractText使用正則表達式得到8595到屬性marks.1marks.2(哪裏比例將打破一個很好的例子 - 2行這樣做很容易;用100k做這件事很荒謬)。然後可以使用表達式語言UpdateAttribute來計算這兩個屬性的平均值(首先轉換toNumber())並填充第三個屬性marks.average(通過鏈接plus()divide()函數或math advanced operation(使用Java反射))。一旦在屬性中具有所需的結果,請使用ReplaceText更新流文件內容,並使用MergeContent將各個流文件合併回單個實例。

如果這是我,我首先會評估輸入數據格式的靜態方式,如果它保證保持不變,可能只需編寫一個Groovy腳本來分析數據並計算出平均值。我認爲,由於具有編寫特定領域的代碼的靈活性,它甚至可以更好地擴展(在合理的範圍內)。如果您需要將其卸載到羣集操作中,Spark就是要走的路。