2015-06-30 12 views
15

में यूनिक्स टाइमस्टैम्प को आज तक कनवर्ट करने के लिए कैसे करें मेरे पास यूनिक्स टाइमस्टैम्प (उदा .435655706000) के कॉलम के साथ डेटा फ्रेम है, और मैं इसे 'yyyy-MM-DD' प्रारूप के साथ डेटा में कनवर्ट करना चाहता हूं, मेरे पास है nscala-time कोशिश की लेकिन यह काम नहीं करता है।स्पार्क

val time_col = sqlc.sql("select ts from mr").map(_(0).toString.toDateTime) 
time_col.collect().foreach(println) 

और मैं मिल गया त्रुटि: java.lang.IllegalArgumentException: अमान्य प्रारूप: "1435655706000" पर विकृत है "6000"

+0

http://stackoverflow.com/questions/18680398/convert-seconds-since-epoch-to-joda-datetime-in-scala – ipoteka

+0

हल, आयात org.joda.time._, sqlc.sql ("एमआर से टीएस का चयन करें")। नक्शा (लाइन => नई डेटटाइम (रेखा (0))। टूस्ट्रिंग ("yyyy-MM-dd")) – youngchampion

उत्तर

3

मैं पर मानचित्रण करके इस समस्या को joda-time लाइब्रेरी का उपयोग कर हल कर लिया है DataFrame और एक स्ट्रिंग में DateTime परिवर्तित:

import org.joda.time._ 
val time_col = sqlContext.sql("select ts from mr") 
         .map(line => new DateTime(line(0)).toString("yyyy-MM-dd")) 
8
import org.joda.time.{DateTimeZone} 
import org.joda.time.format.DateTimeFormat 

आपको निम्नलिखित पुस्तकालयों को आयात करने की आवश्यकता है।

val stri = new DateTime(timeInMillisec).toDateTime.toString("yyyy/MM/dd") 

या अपने मामले के लिए समायोजन:

val time_col = sqlContext.sql("select ts from mr") 
        .map(line => new DateTime(line(0).toInt).toDateTime.toString("yyyy/MM/dd")) 

एक और तरीका नहीं हो सकता है:

import com.github.nscala_time.time.Imports._ 

    val date = (new DateTime() + ((threshold.toDouble)/1000).toInt.seconds) 
      .toString("yyyy/MM/dd") 

आशा इस मदद करता है :)

4

इससे पहले कि स्ट्रिंग के लिए कनवर्ट नहीं की जरूरत है nscala_time

के साथडेटाइम पर लागू करना 0

import com.github.nscala_time.time.Imports._

scala> 1435655706000L.toDateTime 
res4: org.joda.time.DateTime = 2015-06-30T09:15:06.000Z 

`

17

spark1.5 के बाद से, वहाँ है कि करने के लिए एक builtin यूडीएफ है।

val df = sqlContext.sql("select from_unixtime(ts,'YYYY-MM-dd') as `ts` from mr") 

कृपया अधिक जानकारी के लिए Spark 1.5.2 API Doc देखें।

+0

फ़ंक्शन कॉल में इन फ़ंक्शंस का उपयोग करने के लिए आप org.apache.sspark.sql.functions._ भी आयात कर सकते हैं। उदाहरण: df.select (from_unixtime ($ "ts_col"/1000, "yyyy-MM-dd"))। ToDF ("event_date")। Groupby ("event_date")। – panther

+3

गिनती समस्या वर्तमान समय क्षेत्र का उपयोग किया जाएगा रूपांतरण के लिए, यूटीसी नहीं – Oleg

5

यहाँ यह उपयोग कर रहा है स्काला DataFrame कार्य: from_unix_time और to_date

// NOTE: divide by 1000 required if milliseconds 
// e.g. 1446846655609 -> 2015-11-06 21:50:55 -> 2015-11-06 
mr.select(to_date(from_unixtime($"ts"/1000)))