我正在使用Java-Spark。
我正在尝试按日期分区列写入Hive表, 我正在尝试的是:
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__
表示空值。
那我怎么按日期写分区?
谢谢。
答案 0 :(得分:1)
要使用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
兼容的格式
答案 1 :(得分:1)
更简单的方法是使用以下功能
from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyyMMdd')
我更喜欢使用spark sql实现此目的
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);