我是SparkR的新手,我正在学习,在2.2.0版本的快照中学习。我有一个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上有人已经解决了这个问题,并能帮助我。耽误您时间,实在对不起。亲切的问候,内特
发布于 2017-04-14 12:12:44
您可以使用任意一个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解决方案。
https://stackoverflow.com/questions/43418397
复制