Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何获取HDFS上存在的文件的创建日期?_Scala_Hadoop - Fatal编程技术网

Scala 如何获取HDFS上存在的文件的创建日期?

Scala 如何获取HDFS上存在的文件的创建日期?,scala,hadoop,Scala,Hadoop,我正在开发一个Scala Spark程序,该程序需要从HDFS上的一个目录中获取最新创建的文件(每天在dir中创建一个文件),并读取其中的数据以进行进一步处理。 根据我的研究,我发现了以下代码,可以使用Scala获取早2天的文件: import java.nio.file._ import java.time._ import java.time.temporal.ChronoUnit.DAYS val isMoreThan2DaysOld = Files.getLastModifiedTime

我正在开发一个Scala Spark程序,该程序需要从HDFS上的一个目录中获取最新创建的文件(每天在dir中创建一个文件),并读取其中的数据以进行进一步处理。 根据我的研究,我发现了以下代码,可以使用Scala获取早2天的文件:

import java.nio.file._
import java.time._
import java.time.temporal.ChronoUnit.DAYS
val isMoreThan2DaysOld = Files.getLastModifiedTime(path).toInstant.plus(2, DAYS) isBefore Instant.now

但此代码不适用于HDFS上存在的文件。有人能告诉我如何使用Scala实现从HDFS上的目录中拾取最新创建的文件。

您可以使用Scala中的普通hadoop文件系统API获取文件修改日期。选择最新的

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

val conf = spark.sparkContext.hadoopConfiguration
val fs = FileSystem.get(conf)
val dirPath = new Path("csvdatatest")
val filestatus = fs.listStatus(dirPath )
filestatus.foreach(f => println(f.getModificationTime))
这将按降序列出所有文件的文件修改/创建日期。您可以选择最新的文件作为第一个文件

注意:如果使用sparkcontext获取hadoop配置,则不需要在配置中显式指定core-site.xml和hdfs-site.xml。正如我上面使用的

但您可以按以下伪代码创建配置: 指定core-site.xml和hdfs-site.xml的路径

val conf = new Configuration();
conf.addResource(new Path("<core-site-path>/core-site.xml"));
conf.addResource(new Path("<hdfs-site-path>/hdfs-site.xml"));
val fs = FileSystem.get(conf);
val conf=new Configuration();
conf.addResource(新路径(“/core site.xml”);
conf.addResource(新路径(“/hdfs site.xml”);
val fs=FileSystem.get(conf);

您可以在scala中使用普通的hadoop文件系统API来获取文件修改日期。选择最新的

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

val conf = spark.sparkContext.hadoopConfiguration
val fs = FileSystem.get(conf)
val dirPath = new Path("csvdatatest")
val filestatus = fs.listStatus(dirPath )
filestatus.foreach(f => println(f.getModificationTime))
这将按降序列出所有文件的文件修改/创建日期。您可以选择最新的文件作为第一个文件

注意:如果使用sparkcontext获取hadoop配置,则不需要在配置中显式指定core-site.xml和hdfs-site.xml。正如我上面使用的

但您可以按以下伪代码创建配置: 指定core-site.xml和hdfs-site.xml的路径

val conf = new Configuration();
conf.addResource(new Path("<core-site-path>/core-site.xml"));
conf.addResource(new Path("<hdfs-site-path>/hdfs-site.xml"));
val fs = FileSystem.get(conf);
val conf=new Configuration();
conf.addResource(新路径(“/core site.xml”);
conf.addResource(新路径(“/hdfs site.xml”);
val fs=FileSystem.get(conf);

行:val dirPath=新路径(“hdfs://quickstart.cloudera:8020/user/cloudera/pigdata)有问题,因为“dirPath”上的文件路径错误。错误:java.lang.IllegalArgumentException:错误的FS:hdfs://quickstart.cloudera:8020/user/cloudera/pigdata,应为:file:////如果我尝试使用file://:java.io.FileNotFoundException:file:/quickstart.cloudera:8020/user/cloudera/pigdata不存在core-site.xml的属性为:fs.defaultFShdfs://quickstart.cloudera:8020 我在这里犯了什么错误?1-Spark中的默认文件系统似乎设置为localfs,您需要将其设置为hdfs。2-
val dirPath=新路径(“hdfs://quickstart.cloudera:8020/user/cloudera/pigdata“”
使用java.io库的路径。尝试像这样使用完整的类名
org.apache.hadoop.fs.Path
,然后您可以尝试
val dirPath=new org.apache.hadoop.fs.Path(“hdfs://quickstart.cloudera:8020/user/cloudera/pigdata“”
pyspark中是否有等效代码?行:val dirPath=new Path(“”hdfs://quickstart.cloudera:8020/user/cloudera/pigdata")出现问题,因为“dirPath”上的文件路径错误。错误:java.lang.IllegalArgumentException:错误的FS:hdfs://quickstart.cloudera:8020/user/cloudera/pigdata,应为:file:////如果我尝试使用file://:java.io.FileNotFoundException:file:/quickstart.cloudera:8020/user/cloudera/pigdata不存在core-site.xml的属性为:fs.defaultFShdfs://quickstart.cloudera:8020 我在这里犯了什么错误?1-Spark中的默认文件系统似乎设置为localfs,您需要将其设置为hdfs。2-
val dirPath=新路径(“hdfs://quickstart.cloudera:8020/user/cloudera/pigdata“”
使用java.io库的路径。尝试像这样使用完整的类名
org.apache.hadoop.fs.Path
,然后您可以尝试
val dirPath=new org.apache.hadoop.fs.Path(“hdfs://quickstart.cloudera:8020/user/cloudera/pigdata“”
pyspark中是否有等效代码?