2017-04-11 2 views
2

Ich habe eine Spalte in Funkendatenrahmen von String-Datentyp (mit Datum in yyyy-MM-dd-Muster) Ich mag MM/tt/Muster den Spalt Wert anzuzeigenConverting Muster Datum in Funkendatenrahmen

Meine Daten sind

val df = sc.parallelize(Array(
    ("steak", "1990-01-01", "2000-01-01", 150), 
    ("steak", "2000-01-02", "2001-01-13", 180), 
    ("fish", "1990-01-01", "2001-01-01", 100) 
)).toDF("name", "startDate", "endDate", "price") 

df.show() 

+-----+----------+----------+-----+ 
| name| startDate| endDate|price| 
+-----+----------+----------+-----+ 
|steak|1990-01-01|2000-01-01| 150| 
|steak|2000-01-02|2001-01-13| 180| 
| fish|1990-01-01|2001-01-01| 100| 
+-----+----------+----------+-----+ 

root 
|-- name: string (nullable = true) 
|-- startDate: string (nullable = true) 
|-- endDate: string (nullable = true) 
|-- price: integer (nullable = false) 

Ich möchte endDate in MM/TT/JJJJ-Muster anzeigen. Alles, was ich zu tun bin in der Lage, ist die Spalte von Datetype String

val df2 = df.select($"endDate".cast(DateType).alias("endDate")) 

df2.show() 

+----------+ 
| endDate| 
+----------+ 
|2000-01-01| 
|2001-01-13| 
|2001-01-01| 
+----------+ 

df2.printSchema() 

root 
|-- endDate: date (nullable = true) 

I endDate in MM/tt/Muster zeigen wollen, konvertieren. Die einzige Referenz, die ich gefunden habe, ist this, die das Problem nicht löst.

Antwort

4

Sie können die Funktion date_format verwenden.

import sqlContext.implicits._ 
    import org.apache.spark.sql.functions._ 

    val df = sc.parallelize(Array(
    ("steak", "1990-01-01", "2000-01-01", 150), 
    ("steak", "2000-01-02", "2001-01-13", 180), 
    ("fish", "1990-01-01", "2001-01-01", 100))).toDF("name", "startDate", "endDate", "price") 

    df.show() 

    df.select(date_format(col("endDate"), "MM/dd/yyyy")).show 

Ausgang:

+-------------------------------+ 
|date_format(endDate,MM/dd/yyyy)| 
+-------------------------------+ 
|      01/01/2000| 
|      01/13/2001| 
|      01/01/2001| 
+-------------------------------+ 
0

Verwenden pyspark.sql.functions.date_format (Datum, Format):

val df2 = df.select(date_format("endDate", "MM/dd/yyyy").alias("endDate"))