我嘗試使用Apache Spark處理數據庫。但是,我得到這個無法解析的日期異常。我在這裏閱讀關於這個例外的所有其他問題,但他們不幫助我。我的代碼的interesing部分是這樣的:Spark SQL:Sqlite - 無法解析的日期
try {
val tableData = sqlContext.read.format("jdbc")
.options(Map("url" -> databasePath,
"dbtable" -> t))
.load()
if (tableData.count > 0) {
val df = tableData.show
}
} catch {
case s: SQLException => println("DEBUG, SKIPPING TABLE " + t)
case e: Exception => println("EXCEPTION CAUGHT: " + t); System.exit(1)
}
所以,雖然我得到java.sql.SQLException: Error parsing date
我不能趕上這個例外,它總是需要第二個case語句。
雖然捕捉異常並跳過表格會是一個好的開始,但我更感興趣的是使其實際工作。但我從來不會手動撥打Date.parse
,所以我不知道如何應用其他問題的答案。
更多輸出:
Caused by: java.text.ParseException: Unparseable date: "2009-01-01 00:00:00" does not match (\p{Nd}++)\Q-\E(\p{Nd}++)\Q-\E(\p{Nd}++)\Q \E(\p{Nd}++)\Q:\E(\p{Nd}++)\Q:\E(\p{Nd}++)\Q.\E(\p{Nd}++)
EDIT1:按照要求,架構和示例數據:
CREATE TABLE [Invoice]
(
[InvoiceId] INTEGER NOT NULL,
[CustomerId] INTEGER NOT NULL,
[InvoiceDate] DATETIME NOT NULL,
[BillingAddress] NVARCHAR(70),
[BillingCity] NVARCHAR(40),
[BillingState] NVARCHAR(40),
[BillingCountry] NVARCHAR(40),
[BillingPostalCode] NVARCHAR(10),
[Total] NUMERIC(10,2) NOT NULL,
CONSTRAINT [PK_Invoice] PRIMARY KEY ([InvoiceId]),
FOREIGN KEY ([CustomerId]) REFERENCES [Customer] ([CustomerId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
SELECT * FROM Invoice LIMIT 5;
1|2|2009-01-01 00:00:00|Theodor-Heuss-Straße 34|Stuttgart||Germany|70174|1.98
2|4|2009-01-02 00:00:00|Ullevålsveien 14|Oslo||Norway|0171|3.96
3|8|2009-01-03 00:00:00|Grétrystraat 63|Brussels||Belgium|1000|5.94
4|14|2009-01-06 00:00:00|8210 111 ST NW|Edmonton|AB|Canada|T6G 2C7|8.91
5|23|2009-01-11 00:00:00|69 Salem Street|Boston|MA|USA|2113|13.86
EDIT2:我正在運行星火1.5.1。進一步的調查導致我這樣做:https://github.com/apache/spark/commit/d39f15ea2b8bed5342d2f8e3c1936f915c470783。測試用例清楚地包含了我的表格中使用的格式。但是這是Spark 1.6.0的一個提交,如果安全更新,我必須首先檢查所有的依賴關係。
你能告訴架構和示例記錄?如果你刪除了'sqlMapFunc'和'show' /'collect',問題是否會持續存在?如果不是,請包含'sqlMapFunc'實現。如果確實存在,請將其從問題中刪除,因爲它不會添加任何內容。 – zero323
sqlMapFunc不是問題,我檢查了這一點。它現在被一個簡單的'.show'代替,問題依然存在。 – flowit
如果將DateTime更改爲TimeStamp,會發生什麼情況? –