我有一個帶有日期列的 CSV 檔案,如下所示,
datecol
----------
2021-01-11
2021-02-15
2021-02-10
2021-04-22
如果我通過inferSchema在 spark 版本 2.4.5 中啟用來讀取此檔案,我將低于架構,
root
|-- datecol: timestamp (nullable = true)
但是在下面的 spark 3.1 中是輸出。
root
|-- datecol: string (nullable = true)
我已經從 spark 檔案中查看了遷移指南,但沒有得到任何關于此的資訊。
任何人都可以確認這是一個錯誤還是我需要使用其他一些配置?
uj5u.com熱心網友回復:
這是自 Spark 3 以來 Spark 遷移到 Java 8 新 Date API 的結果。您可以閱讀遷移指南:
時間戳/日期字串的決議/格式化。這會影響 CSV/JSON 資料源 [...]。新實作對其輸入執行嚴格檢查。例如,
2015-07-22 10:00:00如果模式是yyyy-MM-dd因為決議器不消耗整個輸入,則無法決議時間戳 。另一個例子是31/01/2015 00:00輸入不能被dd/MM/yyyy hh:mm模式決議, 因為hh假設小時數在 1-12 范圍內。在 Spark 2.4 及以下版本中,java.text.SimpleDateFormat 用于時間戳/日期字串轉換 [...]。
事實上,inferSchema不檢測,DateType但只TimestampType。而且,由于通過在默認CSV資料源,該引數timestampFormat是yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]那么它不會轉化成時間戳上面的原因引。
您可以嘗試在加載 csv 時添加該選項:
val df = spark.read.option("inferSchema", "true").option("timestampFormat", "yyyy-MM-dd").csv("/path/csv")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/393581.html
