簡體   English   中英

在Scala Spark Streaming上更改數據類型

[英]Change datatype on scala Spark Streaming

在第3單元的課程-動手實驗上……有一個我正在學習Scala和Spark的示例(Spark基礎知識1)。

https://courses.cognitiveclass.ai/courses/course-v1:BigDataUniversity+BD0211EN+2016/courseware/14ec4166bc9b4a3a9592b7960f4a5401/b0c736193c834b01b3c1c5bd4ce2d8a8/

我試圖修改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.

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