2017-04-11 13 views
2

私は、MM/DD/YYYYパターンの列の値を表示する (YYYY-MM-DDパターンの日付で)文字列データ型のスパークデータフレームの列を有するスパークデータフレーム内の日付のパターンを変換

私のデータは

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) 

です。私はendDateをMM/dd/yyyyパターンで表示したいと思います。私が行うことができるよすべては私がMM/DD/YYYYパターンでendDateに見せたい

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) 

文字列

からDATETYPEに列を変換しています。私が見つけたリファレンスは thisで問題を解決しません

答えて

4

date_format関数を使用できます。

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 

出力:

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

使用pyspark.sql.functions.date_format(日付、形式):

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