![](/img/trans.png)
[英]How to perform average operation on DataStream in Apache Flink using Java
[英]Apache Flink: How to count the total number of events in a DataStream
我有兩個原始流,我正在加入這些流,然后我要計算已加入的事件總數是多少,尚未加入的事件有多少。 我通過在joinedEventDataStream
上使用地圖來執行此joinedEventDataStream
,如下所示
joinedEventDataStream.map(new RichMapFunction<JoinedEvent, Object>() {
@Override
public Object map(JoinedEvent joinedEvent) throws Exception {
number_of_joined_events += 1;
return null;
}
});
問題#1:這是計算流中事件數量的適當方法嗎?
問題2:我注意到一種有線行為,有些人可能不相信。 問題是,當我在IntelliJ IDE中運行Flink程序時,它向我顯示number_of_joined_events
正確值,但當我將該程序提交為jar
時為0
。 因此,當我將程序作為jar
文件而不是實際計數運行時,我得到number_of_joined_events
的初始值。 為什么僅在提交jar
文件而不在IDE中發生這種情況?
您的方法無效。 通過JAR文件執行程序時,您會注意到行為。
我不知道如何定義number_of_joined_events
,但是我假設它在您的程序中是一個靜態變量。 當您在IDE中運行該程序時,該程序將在單個JVM中運行。 因此,所有運算符都可以訪問靜態變量。 當您將JAR文件提交到遠程進程時,該程序將在其他JVM(可能是多個JVM)中執行,並且客戶端進程中的靜態變量永遠不會更新。
您可以使用Flink的指標或合計1
s的ReduceFunction
來計算已處理記錄的數量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.