我想使用scala/spark列出hdfs目录中的所有文件夹。在hadoop中,我可以使用以下命令: hadoop fs -ls hdfs://sandbox.hortonworks.com/demo/
我试过了:
val conf = new Configuration()
val fs = FileSystem.get(new URI("hdfs://sandbox.hortonworks.com/"), conf)
val path = new Path("hdfs://sandbox.hortonworks.com/demo/")
val files = fs.listFiles(path, false)
但他似乎没有在hadoop目录中查找,因为我找不到我的文件夹/文件。
我还尝试了:
FileSystem.get(sc.hadoopConfiguration).listFiles(new Path("hdfs://sandbox.hortonworks.com/demo/"), true)
但这也无济于事。
你还有别的想法吗?
ps:我还检查了这个thread:spark iterate hdfs directory,但它对我不起作用,因为它似乎不在hdfs目录上搜索,而是只在schema file//的本地文件系统上搜索。
9条答案
按热度按时间hl0ma9xz1#
azure博客存储Map到hdfs位置,因此所有hadoop操作
在azure门户上,转到存储帐户,您将发现以下详细信息:
存储帐户
键-
容器-
路径模式–/users/accountsdata/
日期格式–yyyy-mm-dd
事件序列化格式–json
格式–行分隔
路径模式这里是hdfs路径,您可以登录/putty到hadoop边缘节点并执行以下操作:
上面的命令将列出所有文件。在scala中,您可以使用
xmjla07d2#
}
7uhlpewt3#
我们使用的是hadoop1.4,它没有listfiles方法,所以我们使用liststatus来获取目录。它没有递归选项,但很容易管理递归查找。
5lhxktic4#
在阿贾伊阿胡哈斯回答
isDir
已弃用。。使用
isDirectory
... 请参阅下面完整的示例和输出。结果:
izj3ouym5#
这将创建一个迭代器
it
结束org.apache.hadoop.fs.LocatedFileStatus
那是你的子目录wyyhbhjk6#
这是获取/user/hive下的hdfs文件或文件夹列表的示例代码/
u3r8eeie7#
在spark 2.0+中,
希望这有帮助。
9w11ddsr8#
因为您使用的是scala,所以您可能还对以下内容感兴趣:
不幸的是,这将以字符串的形式返回整个命令输出,因此只解析文件名需要一些努力(使用
fs.listStatus
但是如果您发现自己需要在命令行中轻松地运行其他命令,并且不确定如何在scala中执行,那么只需通过scala.sys.process._
. (使用单个!
如果你只想得到返回码。)zmeyuzjn9#
不过,对于s3,我要的是相同的,而不是hdfs。
我解决了用s3路径创建文件系统的问题,如下所示:
我知道这个问题和hdfs有关,但也许像我这样的人会来这里寻找s3解决方案。由于没有在文件系统中指定uri,它将查找hdfs文件。