2016-05-20 9 views
5

मैं एक dataframe train कहा जाता है का उपयोग कर स्पार्क के लिए टाइमस्टैम्प के, वह निम्न स्कीमा है:Convert स्ट्रिंग स्केला

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

मैं timestamp को date_time स्तंभ डाली और निकाले year मूल्य के साथ एक नया स्तंभ बनाना चाहते हैं date_time कॉलम से।

स्पष्ट रूप से, मैं निम्नलिखित 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| 
+-------------------+---------+--------------+ 

मैं निम्नलिखित 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 | 
+-------------------+---------+--------------+--------+ 

उत्तर

10

ठीक है, अगर तुम करना चाहते date_timecolumn एक बनाने timestampand लिए डाली वर्ष मूल्य के साथ नया कॉलम तब ठीक है:

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 यह एक ही बात नहीं है, और यह अपने कोड कुछ स्ट्रीमिंग का काम के साथ विफल हो लग रहा है। – zero323

+0

यह मेरे डेटाफ्रेम पर कॉल करने के बाद ही विफल रहता है। –

+0

तो क्या यहां समस्या हो सकती है? –

1

आप प्रत्येक पंक्ति के अंत में साल जोड़ने के लिए dataframe मैप कर सकते:

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() 
संबंधित मुद्दे