如何在Apache spark DataFrame中使用Java将unix epoch列转换为Date?

xzabzqsa  于 2023-06-20  发布在  Java
关注(0)|答案(3)|浏览(123)

我有一个json数据文件,其中包含一个属性[creationDate],它是unix epoc的“long”数字类型。Apache Spark DataFrame schema如下所示:

root 
 |-- **creationDate**: long (nullable = true) 
 |-- id: long (nullable = true) 
 |-- postTypeId: long (nullable = true)
 |-- tags: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- title: string (nullable = true)
 |-- viewCount: long (nullable = true)

我想做一些groupBy“creationData_Year”,需要从“creationDate”获取。
使用Java在 DataFrame 中进行这种转换的最简单方法是什么?

lndjwyie

lndjwyie1#

在检查了spark dataframe API和sql函数后,我得出了下面的片段:

DateFrame df = sqlContext.read().json("MY_JSON_DATA_FILE");

DataFrame df_DateConverted = df.withColumn("creationDt", from_unixtime(df.col("creationDate").divide(1000)));

“creationDate”列除以“1000”的原因是TimeUnit不同。orgin“creationDate”是以“milli-second"为单位的unix epoch,然而spark sql“from_unixtime”被设计为以“second"为单位处理unix epoch。

ftf50wuq

ftf50wuq2#

pyspark将Unix epoch毫秒转换为dataframe时间戳

df.select(from_unixtime((df.my_date_column.cast('bigint')/1000)).cast('timestamp').alias('my_date_column'))
snz8szmq

snz8szmq3#

在Spark Scala中

spark.sql("select from_unixtime(1593543333062/1000) as ts").show(false)

相关问题