[英]How to iterate over DataStream
我是scala的新手。 我有一個自定義類Analytics.scala,它具有很少的變量(var a,var b,var c)。 我在測試用例中獲得了Analytics類型的DataStream,並且我想為每個對象將var c的值設置為“ 0”。
我試過在DataStream上使用map函數,但沒有幫助。 我還嘗試將流轉換為列表,然后在該列表上進行迭代,但這也不起作用。
流的類型為DataStream [Analytics]。 這是我嘗試過的:
stream.map(x => x.c=0)
val a = DataStreamUtils.collect(stream.javaStream).asScala.toArray.iterator
a.foreach(x => x.c=0)
在我的測試案例中,var c的值不會更改為0。
通常,Flink DataStream並不是一個有限的集合,您可以迭代一次並完成它-它是一個潛在的無限流,只會不斷擁有更多數據。
使用地圖是正確的方法。 但是,當您將地圖應用於流時,例如
stream.map(x => x.c=0)
您正在描述流轉換,而不是修改流本身。 您應該嘗試
streamWhereCisZero = stream.map(x => x.c=0)
這將創建一個新的流,其中每個元素的c都將設置為零。
這就是我的迭代方式。 不知道這是否是最好的解決方案。
val collection = DataStreamUtils.collect(stream.javaStream)
val results: Seq[Analytics] = collection.asScala.toSeq
for (result <- results){
result.c=0
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.