7

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

根
 |-- creationDate : long (可为空 = true)
 |-- id: long (可为空 = true)
 |-- postTypeId:长(可为空=真)
 |-- 标签:数组(可为空=真)
 | |-- 元素:字符串(包含Null = true)
 |-- 标题:字符串(可为空=真)
 |-- viewCount: long (nullable = true)

我想做一些需要从“creationDate”获取的groupBy“creationData_Year”。

使用 Java在DataFrame中进行这种转换的最简单方法是什么?

4

3 回答 3

11

在检查了 spark dataframe api 和 sql 函数之后,我得到了下面的代码片段:

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

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

“creationDate”列除以“1000”的原因是因为TimeUnit不同。原始“creationDate”是“毫秒”中的 unix 纪元但是 spark sql“ from_unixtime ”旨在处理“”中的 unix 纪元。

于 2016-01-06T05:50:20.767 回答
6

pyspark 从 Unix 纪元毫秒转换为数据帧时间戳

df.select(from_unixtime((df.my_date_column.cast('bigint')/1000)).cast('timestamp').alias('my_date_column'))
于 2018-05-23T00:37:01.687 回答
1

在火花斯卡拉,

spark.sql("select from_unixtime(1593543333062/1000) as ts").show(false)
于 2020-07-20T07:35:27.553 回答