从Apache Spark textFileStream中读取文件

时间:2015-04-01 22:15:33

标签: scala apache-spark spark-streaming

我试图从Hadoop文件系统目录中读取/监视txt文件。但是我注意到这个目录中的所有txt文件都是目录本身,如下例所示:

/crawlerOutput/b6b95b75148cdac44cd55d93fe2bbaa76aa5cccecf3d723c5e47d361b28663be-1427922269.txt/_SUCCESS   
/crawlerOutput/b6b95b75148cdac44cd55d93fe2bbaa76aa5cccecf3d723c5e47d361b28663be-1427922269.txt/part-00000
/crawlerOutput/b6b95b75148cdac44cd55d93fe2bbaa76aa5cccecf3d723c5e47d361b28663be-1427922269.txt/part-00001

我想要阅读部分文件中的所有数据。我尝试使用此代码段中显示的以下代码:

val testData = ssc.textFileStream("/crawlerOutput/*/*")

但不幸的是,它说它不存在/crawlerOutput/*/*。不会textFileStream接受通配符吗?我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:2)

textFileStream()只是fileStream()的包装器,不支持子目录(请参阅https://spark.apache.org/docs/1.3.0/streaming-programming-guide.html)。

您需要列出要监控的特定目录。如果需要检测新目录,可以使用StreamingListener检查然后停止流上下文并使用新值重新启动。

只是大声思考..如果您打算处理每个子目录一次并且只想检测这些新目录,那么可能会关闭另一个可能包含作业信息的位置,或者一旦存在就可以在流式上下文中使用的文件令牌并调用适当的textFile()来摄取新路径。