在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无法正常工作。任何想法都赞赏!
答案 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