Apache spark 使用日期列Java Spark编写分区

Apache spark 使用日期列Java Spark编写分区,apache-spark,hive,hdfs,Apache Spark,Hive,Hdfs,我正在使用Java Spark 我正在尝试按日期分区列写入配置单元表, 我尝试的是: 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); 这意味着空值 那么,我如何按日期编写分区呢 谢谢。

我正在使用Java Spark

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

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);
这意味着空值

那么,我如何按日期编写分区呢


谢谢。

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

Dataset ds=dataframe.select(cols).withColumn(“加载日期”,function.lit(“2018-07-08”).cast(“日期”);

否则,请使用o.a.s.sql.functions.to_date函数并提供与兼容的格式。要使用
cast
日期必须采用标准格式(年-月-日)

Dataset ds=dataframe.select(cols).withColumn(“加载日期”,function.lit(“2018-07-08”).cast(“日期”);

否则,请使用o.a.s.sql.functions.to_date函数并提供与兼容的格式。更简单的方法是使用以下函数

from_unixtime(unix_时间戳('2016/06/01','yyyy/MM/dd'),'yyyyymmdd')

我更喜欢使用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(“加载日期”).save(hdfsDirectory)

更简单的方法是使用以下函数

from_unixtime(unix_时间戳('2016/06/01','yyyy/MM/dd'),'yyyyymmdd')

我更喜欢使用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(“加载日期”).save(hdfsDirectory)

如果使用
cast(“日期”)
则需要正确设置日期格式。试试“2018-08-07”,看看它是否有效。如果使用
cast(“日期”)
则需要正确设置日期格式。试试“2018-08-07”,看看它是否有效。如果我想要不同的格式?yyyyMMdd?我能做吗?如果我想用不同的格式?yyyyMMdd?我能做吗?
ds.createOrUpdateTempTable("tempTable")
val dsWithLoadDate = spark.sql("select *, from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyyMMdd') as load_date from tempTable")