ИскраР. Преобразование UTC в местное время для всех наблюдений, несколько часовых поясов

Я новичок в 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 и может мне помочь. Спасибо за ваше время. С уважением, Нейт


person nate    schedule 14.04.2017    source источник


Ответы (1)


Вы можете использовать либо selectExpr:

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

or 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-решение.

person zero323    schedule 14.04.2017
comment
Это именно то, что я хотел/нужно. Большое тебе спасибо. --нат - person nate; 14.04.2017