[英]Is it possible to replace leading zeroes in a string with an equal number of spaces using replaceAll()?
[英]Missing leading zeroes of date in Hive partition using Spark Dataframe
我正在向 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 的答案:
val df2 = df .withColumn("month", format_string("%02d", $"month"))
我使用下面的代碼段在我的代碼上嘗試了這個,並且成功了!
.withColumn("year", year(col("my_time")))
.withColumn("month", format_string("%02d",month(col("my_time")))) //pad with leading 0's
.withColumn("day", format_string("%02d",dayofmonth(col("my_time")))) //pad with leading 0's
.withColumn("hour", format_string("%02d",hour(col("my_time")))) //pad with leading 0's
.writeStream
.partitionBy("year", "month", "day", "hour")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.