繁体   English   中英

如何在字符串中创建spark中的TimestampType列

[英]How to create TimestampType column in spark from string

我有一些数据包含在如下的字符串数组中(仅用于示例):

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

我想将我的列表映射到Timestamp数组,以便创建一个RDD(myRdd),然后创建一个这样的数据帧

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

我的问题不是如何创建Rdd,而是如何用毫秒时间戳替换字符串。 你有什么主意吗? 谢谢

使用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]

您之前不需要转换为时间戳,您只需转换为long,您可以在创建数据帧时使用模式转换为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))))

否则,您只需从String创建一个数据帧,然后再转换为时间戳,如下所示

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))

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM