我有一个json数据文件,其中包含一个属性[creationDate],它是"long"数字类型的unix epoc。Apache Spark DataFrame模式如下所示:
根|--creationDate:long(nullable=true)|--id:long(nullable=true)|--postTypeId:long(可为null=true)|--标记:数组(nullable=true)||--element:string(containsNull=true)|--title:字符串(nullable=true)|--viewCount:long(nullable=true)
我想做一些groupBy"creationData_Year",需要从"creationDate"获得。
使用Java在DataFrame中进行这种转换的最简单方法是什么?
在检查了spark数据帧api和sql函数后,我得出了以下片段:
DateFrame df=sqlContext.read().json("MY_json_DATA_FILE");DataFrame df_DateConverted=df.withColumn("creationDt",from_unixtime(df.col("creation Date").diff(1000)));
为什么";creationDate";列除以";1000〃;是因为TimeUnit不同。组织";creationDate";是unix epoch在"毫秒";,然而spark sql" from_unixtime";被设计为在"秒";。
df.select(from_unixtime((df.my_date_column.cast('bigint')/1000)).cast('timestamp').alias('my_date_column'))
在火花标量中,
spark.sql("select from_unixtime(1593543333062/1000) as ts").show(false)