HDFS 在spark中如何将parquet文件创建时间戳作为列

kcugc4gi  于 11个月前  发布在  HDFS
关注(0)|答案(1)|浏览(207)

在spark中,当从hdfs中阅读文件时,我想为每条记录添加一列到df中,其中包含读取记录的文件的文件创建时间戳。
例如HDFS具有以下结构

/data/module/
|----------- file1.parquet
|----------- file2.parquet
|----------- file3.parquet
|----------- file4.parquet

字符串
当这个目录在spark中读取时,我想为每个记录添加一个列,该列应该具有从中读取记录的文件的文件创建时间戳。
我试着用df.withColumn("records_inserted_time", current_timestmap())
但这给予了所需的结果。

idfiyjo8

idfiyjo81#

根据您提供的信息,看起来您希望向DF的每条记录添加一列,该列应该具有特定记录所在文件的时间戳。
为此,您可以使用spark._jvm中的FileSystem类,并获得文件名沿着文件创建时间。

from py4j.java_gateway import java_import
# Import Hadoop's FileStatus and FileSystem classes
java_import(spark._jvm, 'org.apache.hadoop.fs.FileSystem')
java_import(spark._jvm, 'org.apache.hadoop.fs.Path')

fs = spark._jvm.FileSystem.get(spark._jsc.hadoopConfiguration())
file_statuses = fs.listStatus(spark._jvm.Path(hdfs_path))
creation_times = [(status.getPath().toString(), status.getModificationTime()) for status in file_statuses]

字符串
一旦你有了文件名和创建时间,你可以简单地用一个look函数来添加新的列。
我已经为这个问题创建了一个解释和示例代码的帖子。https://medium.com/@azam.khan681542/apache-spark-get-source-files-created-timestamp-as-a-column-in-dataframe-4fb1baca82bd

相关问题