gpt4 book ai didi

scala - 如何找到HDFS上存在的文件的正确URI

转载 作者:行者123 更新时间:2023-12-02 20:47:04 25 4
gpt4 key购买 nike

我正在尝试使用Scala-Spark获取HDFS中存在的文件的创建日期。
在我的研究中,我发现我们可以使用以下代码来做到这一点:

val conf = spark.sparkContext.hadoopConfiguration
val fs = FileSystem.get(conf)
val dirPath = new Path("path of the file")
val filestatus = fs.listStatus(dirPath)
filestatus.foreach(f => println(f.getModificationTime))

上面的代码将按文件创建日期的降序列出文件。但是,当我尝试运行代码时,在此行出现错误:
val dirPath=new Path("hdfs://quickstart.cloudera:8020/user/cloudera/input")
dirPath: org.apache.hadoop.fs.Path = hdfs://quickstart.cloudera:8020/user/cloudera/input
val fileStatus = fs.listStatus(dirPath)

错误消息:
**`java.lang.IllegalArgumentException: Wrong FS: hdfs://quickstart.cloudera:8020/user/cloudera/input, expected: file:///`**

我在core-site.xml文件中看到此属性时,在路径中输入了“quickstart.cloudera”:
<property>
<name>fs.defaultFS</name>
<value>hdfs://quickstart.cloudera:8020</value>
</property>

我给“localhost”代替了“quickstart.cloudera”,并试图运行它。但是我仍然面临错误。谁能告诉我我在这里做的错误是什么以及如何纠正它。

我还尝试通过执行以下操作直接引用文件:
val dirPath=new Path("/user/cloudera/input"‌​) 

我从以下命令获得了该路径:
[cloudera@quickstart ~]$ hadoop fs -ls /user/cloudera
Found 1 items
-rw-r--r-- 1 cloudera cloudera 5 2017-11-27 23:13 /user/cloudera/input

最佳答案

在创建文件系统实例时添加URI:

FileSystem.get(new URI("hdfs://quickstart.cloudera:8020/"), new Configuration()) 

然后只需创建如下路径:
 val dirPath=new Path("/user/cloudera/input"‌​) 

关于scala - 如何找到HDFS上存在的文件的正确URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com