我是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解决了这个问题并且可以帮助我。谢谢你的时间。 亲切的问候, 内特
答案 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解决方案。