我正在尝试使用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:///`**
我给了" quickstart.cloudera"在路径中,我在core-site.xml文件中看到此属性:
<property>
<name>fs.defaultFS</name>
<value>hdfs://quickstart.cloudera:8020</value>
</property>
我给了#34; localhost&#34;代替&#34; quickstart.cloudera&#34;并试图运行它。但我仍然面临错误。谁能告诉我我在这里做的错误是什么?如何纠正呢。
我还尝试直接引用文件:
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
答案 0 :(得分:0)
在创建文件系统实例时添加URI:
FileSystem.get(new URI("hdfs://quickstart.cloudera:8020/"), new Configuration())
然后只需创建路径:
val dirPath=new Path("/user/cloudera/input")