从本地文件读取Spark Streaming会产生NullPointerException

时间:2018-03-14 19:42:53

标签: apache-spark nullpointerexception spark-streaming

在OS X High Sierra上使用Spark 2.2.0。我正在运行Spark Streaming应用程序来读取本地文件:

val lines = ssc.textFileStream("file:///Users/userName/Documents/Notes/MoreNotes/sampleFile")
    lines.print()

这给了我

org.apache.spark.streaming.dstream.FileInputDStream logWarning - Error finding new files
java.lang.NullPointerException
    at scala.collection.mutable.ArrayOps$ofRef$.length$extension(ArrayOps.scala:192)

文件存在,我可以使用终端上spark-shell的SparkContext(sc)读取它。由于某种原因,通过Intellij应用程序和Spark Streaming无法正常工作。任何想法都赞赏!

2 个答案:

答案 0 :(得分:0)

引用textFileStream的文档评论:

  

创建一个监视Hadoop兼容文件系统的输入流       对于新文件并将其作为文本文件读取(使用key作为LongWritable,值       作为TextInputFormat的文本和输入格式)。必须将文件写入       通过从同一个中的另一个位置“移动”它们来监视目录       文件系统。文件名以。开头。被忽略了。

     

@param目录监控新文件的HDFS目录

因此,该方法需要参数中目录的路径。

所以我相信这应该避免这个错误:

ssc.textFileStream("file:///Users/userName/Documents/Notes/MoreNotes/")

答案 1 :(得分:0)

火花流将不会读取旧文件,因此首先运行spark-submit命令,然后在指定目录中创建本地文件。确保在spark-submit命令中,仅提供目录名,而不提供文件名。下面是一个示例命令。在这里,我通过spark命令传递目录名称作为我的第一个参数。您也可以在Scala程序中指定此路径。

spark-submit --class com.spark.streaming.streamingexample.HdfsWordCount --jars /home/cloudera/pramod/kafka_2.12-1.0.1/libs/kafka-clients-1.0.1.jar--master local[4] /home/cloudera/pramod/streamingexample-0.0.1-SNAPSHOT.jar /pramod/hdfswordcount.txt