0
我想在SparkR過濾的DataFrame
行的數據幀的時間戳由時間戳與類似的格式如下:過濾行通過SparkR
df <- createDataFrame(sqlContext, data.frame(ID = c(1,2,3),
Timestamp=c('08/01/2014 11:18:30',
'01/01/2015 12:13:45',
'05/01/2015 14:17:33')))
請注意,原來的架構TimeStamp
列String
。說我要03/01/2015 00:00:00
之前過濾那些時間戳,我覺得可能是做這兩種方法:
一是列突變爲timestamp
像正常R 2與dplyr
和lubridate
:
df %>%
mutate(Timestamp = mdy_hms(Timestamp)) %>%
filter(Timestamp < mdy_hms('03/01/2015 00:00:00'))
但我沒有突變DataFrame
的列,因爲它是S4類Column
不是矢量。
第二條本辦法可能是註冊DataFrame
作爲一個表,然後使用SparkSQL
處理timestamp
類型:
df <- createDataFrame(sqlContext, data.frame(ID = c(1,2,3),
Timestamp=c('08/01/2014 11:18:30',
'01/01/2015 12:13:45',
'05/01/2015 14:17:33')))
registerTempTable(df, 'df')
head(sql(sqlContext, 'SELECT * FROM df WHERE Timestamp < "03/01/2015 00:00:00"'))
但由於它仍然是一個字符串比較,因此會給錯誤的結果。什麼是正確的方法來做到這一點?
謝謝你的回答。我還有一個問題,如果我想將模式從「字符串」更改爲「時間戳」,我怎麼能在'SparkR'中執行?我嘗試了''查詢< - 「來自df的SELECT ID,from_unixtime(unix_timestamp(Timestamp,'MM/dd/yyyy HH:mm:ss'))ts' newDf <-sql(sqlContext,query) newDf $ ts < cast(newDf $ ts,「timestamp」) head(newDf)'但它有錯誤'不能強制類「」jobj「」到一個data.frame' – Bamqf
據我所知,你的查詢沒有錯儘管你可以簡單地使用這個''SELECT ID,TIMESTAMP(unix_timestamp(Timestamp,'MM/dd/yyyy HH:mm:ss'))ts FROM df「')。看起來,所需的轉換根本不在SparkR中實現。 – zero323