[英]Change datatype in Array[StructField] at an index spark-shell/ scala
[英]Change datatype on scala Spark Streaming
在第3單元的課程-動手實驗上……有一個我正在學習Scala和Spark的示例(Spark基礎知識1)。
我試圖修改Streaming部分,以便在流進來時計算移動平均值。我還沒有弄清楚該如何做,但是現在我正面臨着一個我不知道如何更改數據類型的問題。
import org.apache.log4j.Logger
import org.apache.log4j.Level
Logger.getLogger("org").setLevel(Level.OFF)
Logger.getLogger("akka").setLevel(Level.OFF)
import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
val ssc = new StreamingContext(sc,Seconds(1))
val lines = ssc.socketTextStream("localhost",7777)
import scala.collection.mutable.Queue
var ints = Queue[Double]()
def movingAverage(values: Queue[Double], period: Int): List[Double] = {
val first = (values take period).sum / period
val subtract = values map (_ / period)
val add = subtract drop period
val addAndSubtract = add zip subtract map Function.tupled(_ - _)
val res = (addAndSubtract.foldLeft(first :: List.fill(period - 1)(0.0)) {
(acc, add) => (add + acc.head) :: acc
}).reverse
res
}
val pass = lines.map(_.split(",")).
map(pass=>(pass(7).toDouble))
pass.getClass
org.apache.spark.streaming.dstream.MappedDStream類
ints ++= List(pass).to[Queue]
名稱:編譯錯誤
消息:控制台:41:錯誤:類型不匹配;
找到的:scala.collection.mutable.Queue [org.apache.spark.streaming.dstream.DStream [Double]]
必需:scala.collection.TraversableOnce [Double]
ints ++= List(pass).to[Queue] ^
堆棧跟蹤:
al pass2 = movingAverage(ints,2)
pass2.print()
ints.dequeue
ssc.start()
ssc.awaitTermination()
如何獲取流數據從傳遞到整數作為雙打隊列?
經過很多詢問
val p1 = new scala.collection.mutable.Queue[Double]
pass.foreachRDD( rdd => {
for(item <- rdd.collect().toArray) {
p1 += item ;
println(item +" - "+ movingAverage(p1,2).last) ;
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.