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
ます。これを行うには 2 つの方法があると思います。
timestamp
1 つは、通常の R のように列を変更し、 dplyr
and を使用することlubridate
です。
df %>%
mutate(Timestamp = mdy_hms(Timestamp)) %>%
filter(Timestamp < mdy_hms('03/01/2015 00:00:00'))
しかし、ベクトルではなくDataFrame
S4 クラスであるため、列の変更に失敗しました。Column
2番目のアプローチは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"'))
しかし、これはまだ文字列比較であるため、間違った結果が得られます。これを行う正しい方法は何ですか?