2016-07-09 9 views
2

ich Daten habe, die wie folgt aussehen:pyspark Dataframe API cast (‚Zeitstempel‘) funktioniert nicht auf Zeitstempel Strings

{"id":1,"createdAt":"2016-07-01T16:37:41-0400"} 
{"id":2,"createdAt":"2016-07-01T16:37:41-0700"} 
{"id":3,"createdAt":"2016-07-01T16:37:41-0400"} 
{"id":4,"createdAt":"2016-07-01T16:37:41-0700"} 
{"id":5,"createdAt":"2016-07-06T09:48Z"} 
{"id":6,"createdAt":"2016-07-06T09:48Z"} 
{"id":7,"createdAt":"2016-07-06T09:48Z"} 

Ich bin Gießen das createdAt Feldes wie folgt zu.

from pyspark.sql import SQLContext 
from pyspark.sql.functions import * 

sqlContext = SQLContext(sc) 
df = sqlContext.read.json('data/test.json') 
dfProcessed = df.withColumn('createdAt', df.createdAt.cast('timestamp')) 

dfProcessed.printSchema() 
dfProcessed.collect() 

Ausgabe ich bekomme ist wie folgt. Ich bekomme keine Werte für createdAt. Was kann ich tun, um das Feld als richtigen Zeitstempel abzurufen?

root 
|-- createdAt: timestamp (nullable = true) 
|-- id: long (nullable = true) 

[Row(createdAt=None, id=1), 
Row(createdAt=None, id=2), 
Row(createdAt=None, id=3), 
Row(createdAt=None, id=4), 
Row(createdAt=None, id=5), 
Row(createdAt=None, id=6), 
Row(createdAt=None, id=7)] 
+0

BTW, welche Version von 'Apache Spark' verwenden Sie? –

+0

Ich benutze 1.6.2 – Gopala

Antwort

6

Um eine Zeichenfolgenspalte einfach in einen Zeitstempel umzuwandeln, muss die Zeichenfolgenspalte richtig formatiert sein.

die "createdAt" Spalte als Zeitpunkt abzurufen, können Sie die UDF-Funktion schreiben, die die Zeichenfolge

umwandeln würde "2016-07-01T16: 37: 41-0400"

zu

"2016.07.01 16.37.41"

und wandle die Spalte "createdAt" in ein neues Format um (vergiss nicht, das Zeitzonenfeld zu bearbeiten).

Sobald Sie eine Spalte mit Zeitstempeln als Zeichenfolgen wie "2016-07-01 16:37:41" haben, würde eine einfache Umwandlung in den Zeitstempel die Aufgabe übernehmen, wie Sie es in Ihrem Code haben.

Sie können mehr über Datum/Uhrzeit/String-Behandlung in Spark here lesen.

+2

Verstanden. Vielen Dank. Ich hatte gehofft, UDFs und zusätzliche Verarbeitung mit etwas eingebautem zu vermeiden, das sich effizienter darum kümmert. Aber es scheint keinen zu geben. – Gopala