2015-04-01 89 views
2

我试图从Hadoop文件系统目录读取/监视txt文件。但我注意到这个目录内的所有TXT文件是目录本身的表现在这个例子波纹管:从Apache Spark读取文件textFileStream

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

我愿意阅读部分的文件里面的所有数据。我试图用作为显示在这个片段中下面的代码:

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

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

回答

2

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

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

只是大声思考..如果你打算每个子目录处理一次,只是想检测这些新目录,那么可能会关闭另一个可能包含作业信息或文件标记的位置,上下文并调用适当的textFile()来摄取新路径。