2017-07-17 92 views
1

创建TimestampType列我包含在字符串中像下面阵列(只是为例)一些DATAS:如何火花从字符串

val myArray = Array("1499955986039", "1499955986051", "1499955986122") 

我想我的列表映射到时间戳的阵列,在为了创建一个RDD(myRdd),然后创建一个数据帧像这样

val df = createdataframe(myRdd, StructType(StructField("myTymeStamp", TimestampType,true) 

我的问题不是如何创建个R dd,而是如何通过毫秒时间戳来替换字符串。你有什么主意吗?由于

+0

保留字符串,当您定义并将其转换为时间戳后使用内置功能。 – philantrovert

回答

5

使用java.sql.Timestamp

val myArray = Array("1499955986039", "1499955986051", "1499955986122") 
import java.sql.Timestamp  
import org.apache.spark.sql.Row 
import org.apache.spark.sql.types.{StructType, StructField, TimestampType} 

val rdd = sc.parallelize(myArray).map(s => Row(new Timestamp(s.toLong))) 

val schema = StructType(Array(StructField("myTymeStamp", TimestampType, true))) 

spark.createDataFrame(rdd, schema) 
// res25: org.apache.spark.sql.DataFrame = [myTymeStamp: timestamp] 
3

你不需要转换之前,时间戳, 你刚才转换为长,您可以使用模式转换而产生数据帧如下,以tymestamp

import org.apache.spark.sql.Row 

val myArray = Array("1499955986039", "1499955986051", "1499955986122") 

val myrdd = spark.sparkContext.parallelize(myArray.map(a => Row(a.toLong))) 

val df = spark.createDataFrame(myrdd, StructType(Seq(StructField("myTymeStamp", TimestampType,true)))) 

否则,你可以创建字符串和投一个数据帧到后来时间戳如下

val df = spark.createDataFrame(myrdd, StructType(Seq(StructField("myTymeStamp", StringType,true)))) 

//cast myTymeStamp from String to Long and to timestamp 
df.withColumn("myTymeStamp", $"myTymeStamp".cast(LongType).cast(TimestampType)) 

希望这有助于!