我试图从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
接受通配符吗?我该怎么做才能解决这个问题?
答案 0 :(得分:2)
textFileStream()
只是fileStream()
的包装器,不支持子目录(请参阅https://spark.apache.org/docs/1.3.0/streaming-programming-guide.html)。
您需要列出要监控的特定目录。如果需要检测新目录,可以使用StreamingListener检查然后停止流上下文并使用新值重新启动。
只是大声思考..如果您打算处理每个子目录一次并且只想检测这些新目录,那么可能会关闭另一个可能包含作业信息的位置,或者一旦存在就可以在流式上下文中使用的文件令牌并调用适当的textFile()
来摄取新路径。