write分区javaspark

z6psavjg  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(278)

我用的是javaspark。
我尝试按日期分区列写入配置单元表,我尝试的是:

Dataset<Row> ds = dataframe.select(cols).withColumn("load_date", function.lit("08.07.2018").cast("date"));
ds.write().mode(mode).partitionBy("load_date").save(hdfsDirectory);

在运行下面的行之后,我在hdfs中看到以下目录:

/load_date=__HIVE_DEFAULT_PARTITION__

这意味着空值。
那么我怎样才能按日期写分区呢?
谢谢。

dfuffjeb

dfuffjeb1#

使用 cast 日期必须采用标准格式(年-月-日)

Dataset<Row> ds = dataframe.select(cols).withColumn("load_date", function.lit("2018-07-08").cast("date"));

否则使用 o.a.s.sql.functions.to_date 函数并提供与 SimpleDateFormat

iugsix8n

iugsix8n2#

更简单的方法是使用以下函数 from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyyMMdd') 我更喜欢使用sparksql来实现这一点

ds.createOrUpdateTempTable("tempTable")
val dsWithLoadDate = spark.sql("select *, from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyyMMdd') as load_date from tempTable")
``` `dsWithLoadDate.write().mode(mode).partitionBy("load_date").save(hdfsDirectory);` 

相关问题