簡體   English   中英

Spark FileStreaming無法與foreachRDD一起使用

[英]Spark FileStreaming not Working with foreachRDD

我是Spark的新手,並且正在構建一個Small示例應用程序,它是一個Spark fileStreaming應用程序。 我想要的只是一次讀取整個文件,而不是逐行讀取(我想這就是textFileStream所做的事情)。

代碼如下:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.StreamingContext._

import org.apache.hadoop.io.LongWritable
import org.apache.hadoop.io.Text
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat

import scalax.io._

object SampleXML{

    def main(args: Array[String]){

        val logFile = "/home/akhld/mobi/spark-streaming/logs/sample.xml"

        val ssc = new StreamingContext("spark://localhost:7077","XML Streaming Job",Seconds(5),"/home/akhld/mobi/spark-streaming/spark-0.8.0-incubating",List("target/scala-2.9.3/simple-project_2.9.3-1.0.jar"))

        val lines = ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/akhld/mobi/spark-streaming/logs/")

        lines.print()

        lines.foreachRDD(rdd => {
          rdd.count()  // prints counts

        })


        ssc.start()


    }
}

此代碼失敗,並顯示以下異常:

[error] /home/akhld/mobi/spark-streaming/samples/samplexml/src/main/scala/SampleXML.scala:31: value foreachRDD is not a member of org.apache.spark.streaming.DStream[(org.apache.hadoop.io.LongWritable, org.apache.hadoop.io.Text)]
[error]         ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/akhld/mobi/spark-streaming/logs/").foreachRDD(rdd => {
[error]                                                                                                       ^
[error] one error found
[error] (compile:compile) Compilation failed
[error] Total time: 3 s, completed Feb 3, 2014 7:32:57 PM

如果這不是顯示流中文件內容的正確方法,請幫我舉個例子。 我搜索了很多,但找不到合適的文件來使用fileStream。

好吧,Spark Streaming中的textFileStream旨在繼續讀取和處理正在目錄中寫入的文件。 因此,如果您必須一次處理一個文件,則直接使用Spark會更簡單!

 val lines = sparkContext.textFile(<file URL>)
 lines.foreach(line => println(line))

這將打印文件中的所有行。

另外,我相信這里的問題是您不能在forEach流中的RDD上調用count()。 原因是,如果您這樣做,我認為它會阻止forEach塊的進度-並且流使用者停止工作。

我為此https://issues.apache.org/jira/browse/SPARK-4040創建了一個JIRA。

我認為當在forEach塊中引用RDD時,可以對RDD進行一些敏感的API調用,但是尚未弄清楚所有細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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