簡體   English   中英

如何在DataStream上進行迭代

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM