2017-04-14 73 views
0

我是SparkR的新手,隨時瞭解情況以及版本2.2.0 - SNAPSHOT。我有一個帶有一列UTC時間戳的SparkDataFrame,一列時區。例如:SparkR。將UTC轉換爲所有觀測值的本地時間,多個時區

mydates<- c("2012-12-22 14:23:05", "2015-01-19 16:37:42", "2017-03-02 08:22:55") 
mytimeZones<- c("America/Chicago", "America/New_York", "Pacific/Galapagos") 
dfr<- data.frame(date=mydates, timezone=mytimeZones) 

dfs<- SparkR::createDataFrame(dfr) 

我想要做的是爲我的數據集中的每個觀察做一個當地時間的列。我看到from_utc_timestamp()函數接受一列時間戳和一個表示所需時區轉換的字符串。我的問題是我有兩個列。鑑於此,我想知道工作流將需要什麼,如果有更多SparkR經驗的人可能願意提供有關我如何解決此問題的見解?目前,我嘗試過這樣的事情:

dftest<- withColumn(dfs, "LocalTime", 
    SparkR:::foreach(dfs, function(x){from_utc_timestamp(y=x$date, x=x$timezone)}) 
) 

但沒有成功。我希望有人在SparkR解決了這個問題,可以幫助我。謝謝你的時間。 親切的問候, 內特

回答

1

您可以使用selectExpr

selectExpr(dfs, "*", "from_utc_timestamp(date, timezone) AS LocalTime") 

expr

withColumn(dfs, "LocalTime", expr("from_utc_timestamp(date, timezone)")) 

在一個簡單的情況,其中時區是一個常量字符串調用from_utc_timestamp直接會做絕招:

withColumn(dfs, "LocalTime", 
    from_utc_timestamp(column("date"), "America/New_York") 

遺憾的是,沒有from_utc_timestamp,簽名(Column, Column) => Column,因此是SQL-ish解決方案。

+0

這正是我想要/需要的。非常感謝你。 --nate – nate