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