【发布时间】:2016-05-17 17:57:25
【问题描述】:
我正在向 Spark Dataframe 添加一个分区列。新列包含年月日。 我的数据框中有一个时间戳列。
DataFrame dfPartition = df.withColumn("year", df.col("date").substr(0, 4));
dfPartition = dfPartition.withColumn("month", dfPartition.col("date").substr(6, 2));
dfPartition = dfPartition.withColumn("day", dfPartition.col("date").substr(9, 2));
当我输出数据框时,我可以看到列的正确值,例如:2016 01 08
但是当我将这个数据框导出到像
这样的配置单元表时dfPartition.write().partitionBy("year", "month","day").mode(SaveMode.Append).saveAsTable("testdb.testtable");
我看到生成的目录结构缺少前导零。 我尝试将列转换为字符串,但没有成功。
有没有办法在 hive 分区中捕获两位数字日期/月份
谢谢
【问题讨论】:
-
你的日期栏是什么类型的?如果是整数类型,这可能是他在解析过程中删除前导零的原因。
-
它的字符串,我也在该列上做子字符串(它也返回字符串)我也可以在数据帧输出中看到 0。
-
这看起来像 spark 中的一个错误:您确实拥有应该保留 0 的正确数据类型(字符串)。随意在 spark 用户的列表上提问:他们可能会要求您提交报告。
标签: java hadoop apache-spark hive apache-spark-sql