2016-05-20 7 views
5

Mam dataframe nazwie train, ma następujący schemat:Konwersja ciąg znacznik czasu dla Spark użyciu Scala

root 
|-- date_time: string (nullable = true) 
|-- site_name: integer (nullable = true) 
|-- posa_continent: integer (nullable = true) 

chcę oddać kolumnę date_time do timestamp i utworzyć nową kolumnę z wartością year wydobytego z kolumny date_time.

Żeby było jasne, mam następujący dataframe:

+-------------------+---------+--------------+ 
|   date_time|site_name|posa_continent| 
+-------------------+---------+--------------+ 
|2014-08-11 07:46:59|  2|    3| 
|2014-08-11 08:22:12|  2|    3| 
|2015-08-11 08:24:33|  2|    3| 
|2016-08-09 18:05:16|  2|    3| 
|2011-08-09 18:08:18|  2|    3| 
|2009-08-09 18:13:12|  2|    3| 
|2014-07-16 09:42:23|  2|    3| 
+-------------------+---------+--------------+ 

chcę uzyskać następujące dataframe:

+-------------------+---------+--------------+--------+ 
|   date_time|site_name|posa_continent|year | 
+-------------------+---------+--------------+--------+ 
|2014-08-11 07:46:59|  2|    3|2014 | 
|2014-08-11 08:22:12|  2|    3|2014 | 
|2015-08-11 08:24:33|  2|    3|2015 | 
|2016-08-09 18:05:16|  2|    3|2016 | 
|2011-08-09 18:08:18|  2|    3|2011 | 
|2009-08-09 18:13:12|  2|    3|2009 | 
|2014-07-16 09:42:23|  2|    3|2014 | 
+-------------------+---------+--------------+--------+ 

Odpowiedz

10

dobrze, jeśli chcesz rzucić date_timecolumn do timestampand utworzyć nowa kolumna z wartością roku, a następnie wykonaj dokładnie to:

import org.apache.spark.sql.functions.year 

df 
    .withColumn("date_time", $"date_time".cast("timestamp")) // cast to timestamp 
    .withColumn("year", year($"date_time")) // add year column 
+0

@jackAKAkarthik To nie jest to samo, i wygląda Twój kod nie działa z jakiegoś zadania streamingu. – zero323

+0

Błąd kończy się dopiero po dodaniu .withColumn do mojej ramki danych. –

+0

Więc wat może być problemem tutaj? –

1

Można by odwzorować dataframe dodać rok na końcu każdego wiersza:

df.map { 
    case Row(col1: String, col2: Int, col3: Int) => (col1, col2, col3, DateTime.parse(col1, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).getYear) 
}.toDF("date_time", "site_name", "posa_continent", "year").show() 
Powiązane problemy