我把一些日誌文件到SQL表通過Spark和我的模式是這樣的:SparkSQL時間戳查詢失敗
|-- timestamp: timestamp (nullable = true)
|-- c_ip: string (nullable = true)
|-- cs_username: string (nullable = true)
|-- s_ip: string (nullable = true)
|-- s_port: string (nullable = true)
|-- cs_method: string (nullable = true)
|-- cs_uri_stem: string (nullable = true)
|-- cs_query: string (nullable = true)
|-- sc_status: integer (nullable = false)
|-- sc_bytes: integer (nullable = false)
|-- cs_bytes: integer (nullable = false)
|-- time_taken: integer (nullable = false)
|-- User_Agent: string (nullable = true)
|-- Referrer: string (nullable = true)
正如你可以看到我創建了一個時間戳字段,我讀出由星火支持(日期止跌根據我的理解,我的工作沒有那麼成功)。我很喜歡用於「where timestamp>(2012-10-08 16:10:36.0)」的查詢,但是當我運行它時,我不斷收到錯誤。 我試過以下2個sintax格式: 對於第二個我解析一個字符串,所以我確定我實際上是以時間戳格式傳遞它。 我使用2個函數:解析和date2timestamp。
任何提示我應該如何處理時間戳值?
謝謝!
1) 階>sqlContext.sql( 「SELECT * FROM日誌作爲升其中l.timestamp =(2012-10-08 16:10:36.0)」。)收集
java.lang.RuntimeException: [1.55] failure: ``)'' expected but 16 found
SELECT * FROM Logs as l where l.timestamp=(2012-10-08 16:10:36.0)
^
2) sqlContext.sql( 「SELECT * FROM日誌作爲升其中l.timestamp =」 + date2timestamp(formatTime3.parse( 「2012-10-08 16:10:36.0」))。)收集
java.lang.RuntimeException: [1.54] failure: ``UNION'' expected but 16 found
SELECT * FROM Logs as l where l.timestamp=2012-10-08 16:10:36.0
^
我已經試圖把周圍的時間戳單引號,它看起來像,因爲結果集是空的,它不該」它不會讀它作爲一個時間戳噸。 我也試過CAST AS建議,但它也不起作用。我明確地得到這個錯誤: java.lang.RuntimeException:[1.76]失敗:''STRING''預期但找到標識符TIMESTAMP – bobo32 2014-11-23 20:52:40