Windows上StreamingContext.textFileStream的正确目录路径格式是什么?

时间:2017-05-18 12:55:02

标签: scala apache-spark spark-streaming

我正在尝试执行spark流应用程序来处理文件数据流以执行字数统计。 我正在阅读的目录来自Windows。如图所示,我使用本地目录,例如" Users / Name / Desktop / Stream"。它不是HDFS。 我创建了一个文件夹作为" Stream"在桌面上。 我启动了Spark Streaming应用程序,之后我将一些文本文件添加到文件夹' Stream'中。但是我的spark应用程序无法读取文件。它始终给出空的结果。 这是我的代码。

//args(0) = local[2]
object WordCount {
def main(args: Array[String]) {
    val ssc = new StreamingContext(args(0), "word_count",Seconds(5))
    val lines = ssc.textFileStream("Users/name/Desktop/Stream")
    val words = lines.flatMap(_.split(" "))
    val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
    wordCounts.print()
    ssc.start()
    ssc.awaitTermination()
  }
}

输出:每5秒获取一次空数据

17/05/18 07:35:00 INFO Executor: Running task 0.0 in stage 71.0 (TID 35)
-------------------------------------------
Time: 1495107300000 ms
-------------------------------------------

我尝试将路径设为C:/Users/name/Desktop/Stream - 仍然是相同的问题和应用程序无法读取文件。

如果我提供错误的目录路径,有人可以指导吗?

1 个答案:

答案 0 :(得分:0)

您的代码很好,因此问题是使用正确的目录路径。请使用file://前缀表示将提供file://C:/Users/name/Desktop/Stream的本地文件系统。

请一步一步确认我们的理解是在同一水平。

执行Spark Streaming应用程序时,请创建目录,使其位于启动应用程序的同一目录中,例如Stream。一旦您确认应用程序与本地目录一起正常工作,我们将全局修复它以从Windows上的任何目录读取(如果仍然需要)。

请确保您"移动"您的文件作为在受监视目录中创建文件的操作必须是原子的(部分写入会将文件标记为已处理 - 请参阅StreamingContext)。

  

必须通过"移动"将文件写入受监控的目录。它们来自同一文件系统中的其他位置。

正如您在code中所看到的那样,directory路径最终会被包裹起来"使用Hadoop的File所以问题在于说服它接受你的路径:

if (_path == null) _path = new Path(directory)