2017-05-11 13 views
1

私はSparkR(Apache Spark 2.1.0)の適用機能に問題があります。 SparkDataFrameで任意の関数を適用すると、POSIXctはEpochから整数ミリ秒として保存されるため、POSIXct型のタイムスタンプは整数に降格されます。SparkRを使用したApache Spark 2.1.0のPOSIXctタイプの降格

この単純化を防ぐ方法はありますか?ここ

は最小限の例である:

IがR data.frameを作成し、スパーク内にロード:

localDF <- data.frame(time=as.POSIXct(c("2016-01-01 00:51:45","2016-01-01 02:29:51", "2016-01-01 03:58:45", "2016-01-01 05:27:23"))) 
df <- as.DataFrame(localDF) 
str(df) 

得られた出力は:

'SparkDataFrame': 1 variables: 
$ time: POSIXct 2016-01-01 00:51:45 2016-01-01 02:29:51 2016-01-01 03:58:45 2016-01-01 05:27:23 

今はdapply使用しますこのSparkDataFrameにR関数を適用する場合:

sillyFunction <- function(x){ 
    return(x) 
} 
outdf <- dapplyCollect(df, sillyFunction) 
str(outdf) 

しかし、構造が変更されます。

'data.frame': 4 obs. of 1 variable: 
$ time: num 1.45e+09 1.45e+09 1.45e+09 1.45e+09 

ありがとう!

答えて

0

documentationによれば、私は、RのPOSIXctとSparkのタイムスタンプのマッピングがデフォルトで行われることを理解しています。

ただし、機能を少し変更して元のPOSIXct形式で読み取ることができます。

sillyFunction <- function(x){ 
    return(strftime(as.POSIXct(x$time, origin="1970-01-01"), format="%Y-%m-%d %H:%M:%S")) 
} 

> outdf <- dapplyCollect(df, sillyFunction) 
> str(outdf) 
chr [1, 1:4] "2016-01-01 00:51:45" "2016-01-01 02:29:51" "2016-01-01 03:58:45" "2016-01-01 05:27:23" 

この情報が役立ちますようお願いいたします。

+0

返信いただきありがとうございます! 私はすでにあなたのようなアプローチを考えていましたが、問題は、私がタイムスタンプを使用するたびにPOSIXctにキャストしたくないということです。ほとんどの操作を行うことができるように、すぐにエポックタイムスタンプを数秒で使用することを検討していますが、データが特定のスキーマに設定されている場合、SparkRはそれを降格するのはなぜですか? –

関連する問題