首页 > 解决方案 > 如何在 Scala 数据框中获取文件的创建日期

问题描述

此处解释了如何在 Scala 中打印文件的日期。

我的问题是如何获取包含此信息的变量,该变量可以作为列返回到数据框。我希望允许的任何转换实际上都是不允许的。

我的代码(使用 Scala 2.11):

import org.apache.spark.sql.functions._
import java.nio.file.{Files, Paths} // Needed for file time
import java.nio.file.attribute.BasicFileAttributes
import java.util.Date

def GetFileTimeFunc(pathStr: String): String = {
// From: https://stackoverflow.com/questions/47453193/how-to-get-creation-date-of-a-file-using-scala
  val FileTime = Files.readAttributes(Paths.get(pathStr), classOf[BasicFileAttributes]).creationTime;
  val JavaDate = Date.from(FileTime.toInstant);
  return(JavaDate.toString())
}
@transient val GetFileTime = udf(GetFileTimeFunc _)

val filePath = "dbfs:/mnt/myData/" // location of data
val file_df = dbutils.fs.ls(filePath).toDF // Output columns are $"path", $"name", and $"size"
  .withColumn("FileTimeCreated", GetFileTime($"path"))
display(file_df)//.select("name", "size"))

输出:

SparkException: 无法执行用户定义的函数($anonfun$2: (string) => string)

出于某种原因,Instant 不允许作为列类型,因此我不能将其用作返回类型。对于 FileTime、JavDate 等也是如此。

标签: scaladataframefile-attributes

解决方案


推荐阅读