2016-10-27 1 views
1

Ich versuche, eine CSV-Datei zu lesen und an eine Tabelle anzuhängen. Für die Datumsspalte wird Timestamp format must be yyyy-mm-dd hh:mm:ss Exception ausgelöst.Apache Spark: Fixing das Zeitstempelformat

Ich ging ein paar Lösungen durch, aber keine funktionierte für mich.

Ich versuche, eine udf zu verwenden, aber es wirft eine Ausnahme:

Schema for type java.util.Date is not supported 

Hier ist, was ich versucht habe:

val dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss") 
val toDate = udf[Date, String](dateFormat.parse(_)) 
val schema = StructType(Array(StructField("id", LongType, nullable=true), StructField("name", StringType, nullable=true), StructField("date_issued", TimestampType, nullable=true))) 
var df = spark.read.schema(schema).csv("./data/test.csv") 
var df2 = df.withColumn("date_issued", toDate(df("date_issued"))) 
df2.show() 

df2.write.mode(SaveMode.Append).jdbc("jdbc:postgresql://localhost:5432/db", "card", connectionProperties) 
+0

Ausprobieren Verwenden 'java.sql.date' statt' java.util.date' – Shankar

+0

'' SimpleDateFormat' gibt java.util.date' –

+0

meine Antwort aktualisiert, bitte überprüfen. – Shankar

Antwort

1

Das Problem ist, müssen die util Datum konvertieren SQL-Datum.

Versuchen Sie den folgenden Code.

def convertToDate(dateTime: String): Date = { 

    val formatter = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss") 
    val utilDate = formatter.parse(dateTime) 
    new java.sql.Date(utilDate.getTime) 
    } 

Dann konvertieren Sie diese Funktion als UDF.

val toDate = udf(convertToDate(_: String))