微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从文件中读取数据时触发“修改前”选项

如何解决从文件中读取数据时触发“修改前”选项

我使用 Spark-2.4 从 hadoop 读取文件。 要求是读取修改时间在某个提供值之前的文件

我遇到了提到选项 modifiedBefore 的 spark 文档,请参阅以下 spark 文档 Modification Time Path Filters,但我不确定它是否在 spark 2.4 中可用,如果没有,我该怎么做达到这个目标?

解决方法

选项 modifiedBeforemodifiedAfter 从 Spark 3+ 开始可用,并且只能用于批处理而不是流式处理。对于 Spark 2.4,您可以使用 Hadoop FileSystem globStatus 方法并使用 getModificationTime 过滤文件。

下面是一个函数的例子,它接受一个路径和一个阈值,并返回使用阈值过滤的文件路径列表:

import org.apache.hadoop.fs.Path

def getFilesModifiedBefore(path: Path,modifiedBefore: String) = {
  val format = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
  val thresHoldTime = format.parse(modifiedBefore).getTime()
  
  val files = path.getFileSystem(sc.hadoopConfiguration).globStatus(path)
  
  files.filter(_.getModificationTime < thresHoldTime).map(_.getPath.toString)

}

然后将其与 spark.read.csv 一起使用:

val df = spark.read.csv(getFilesModifiedBefore(new Path("/mypath"),"2021-03-17T10:46:12"):_*)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。