2017-04-14 1 views
0

Ich bin neu in SparkR, lernend wie ich gehe und auf Version 2.2.0 - SNAPSHOT. Ich habe einen SparkDataFrame mit einer Spalte von UTC-Zeitstempeln, eine Spalte von Zeitzonen. Zum Beispiel:SparkR. Konvertiere UTC in lokale Zeit für alle Beobachtungen, mehrere Zeitzonen

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) 

Was ich tun möchte, ist eine Spalte mit lokalen Zeiten für jede Beobachtung in meinem Datensatz zu machen. Ich habe gesehen, dass die Funktion from_utc_timestamp() eine Spalte mit Zeitstempeln und eine Zeichenkette für die gewünschte Zeitzonenumwandlung enthält. Mein Problem ist, dass ich Spalten von beiden habe. Angesichts dessen frage ich mich, was der Workflow sein müsste und ob jemand mit mehr Erfahrung mit SparkR bereit wäre, einen Einblick zu geben, wie ich dieses Problem angehen kann? Im Moment habe ich folgende Dinge ausprobiert:

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

Aber ohne Erfolg. Ich hoffe, dass jemand da draußen dieses Problem in SparkR anpackt und mir helfen könnte. Vielen Dank für Ihre Zeit. Mit freundlichen Grüßen, Nate

Antwort

1

können Sie verwenden entweder selectExpr:

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

oder expr:

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

In einem einfacheren Fall, in dem Zeitzone ein konstanter String from_utc_timestamp Aufruf tun würde direkt die Trick:

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

Leider gibt es keine from_utc_timestamp mit Signatur (Column, Column) => Column, daher die SQL-ish-Lösung.

+0

Dies ist genau das, was ich wollte/brauchte. Vielen Dank. - angeboren – nate

Verwandte Themen