是否可以通过将hdfs的uri作为文件类的构造函数来创建文件示例?例如:
val conf = new Configuration()
conf.addResource(hdfsCoreSitePath)
conf.addResource(hdfsHDFSSitePath)
val uri = conf.get("fs.default.name")
val file = new File(uri + pathtothefile)
然后,对于file示例,我希望使用file类提供的函数访问文件列表,例如 file.list()
返回一个字符串数组,该字符串命名此抽象路径名表示的目录中的文件和目录。我试过密码,但它返回了 null
上 file.list()
.
不推荐使用下面的方法,因为我正在尝试为普通文件系统和hdfs编写相同的代码库,以实现代码的可重用性。
val fileSystem = FileSystem.get(conf)
val status = fileSystem.listStatus(new Path(filepath))
status.map(x => ...
2条答案
按热度按时间xam8gpfp1#
fs.default.name
已弃用。尝试使用fs.defaultFS
并确保此属性在您使用以下命令引用的core-site.xml文件中可用https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/core-default.xml
e7arh2l62#
常规的内置java/scala文件api不适用于hdfs文件。协议和实现太不一样了。您必须使用hadoopapi来访问hdfs文件,如第二个示例所示。
不过,好消息是hadoopapi将适用于非hdfs文件(常规文件)。所以代码是可重用的。只需使用如下uri:
file:///foo/bar
对于本地文件。