SparkR。将UTC转换为所有观测的当地时间,多个时区

时间:2017-04-14 19:57:33

标签: r apache-spark sparkr

我是SparkR的新手,随时随地学习,以及2.2.0版 - SNAPSHOT。我有一个SparkDataFrame,其中包含一列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 个答案:

答案 0 :(得分:1)

您可以使用selectExpr

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

expr

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

在一个更简单的情况下,timezone是一个直接调用from_utc_timestamp的常量字符串,可以解决这个问题:

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

不幸的是,from_utc_timestamp没有签名(Column, Column) => Column,因此是SQL-ish解决方案。