虽然我尝试在Spark DataFrame中将字符串字段强制转换为TimestampType,但输出值的精度为微秒(yyyy-MM-dd HH:mm:ss.S
)。但我需要的格式是yyyy-MM-dd HH:mm:ss
即,不包括微秒精度。另外,我想在写入实木复合地板文件时将其保存为时间戳字段。 所以我的字段的数据类型应该是使用TimestampType格式yyyy-MM-dd HH:mm:ss
的时间戳格式化Spark中的TimestampType DataFrame-斯卡拉
我尝试作为
col("column_A").cast(TimestampType)
or
col("column_A").cast("timestamp")
投领域的时间戳。这些能够将该字段投射到时间戳,但具有微秒精度。
任何人都可以帮助保存时间戳数据类型为具有所需格式规格的实木复合地板文件。
编辑
输入:
val a = sc.parallelize(List(("a", "2017-01-01 12:02:00.0"), ("b", "2017-02-01 11:22:30"))).toDF("cola", "colb")
scala> a.withColumn("datetime", date_format(col("colb"), "yyyy-MM-dd HH:mm:ss")).show(false)
+----+---------------------+-------------------+
|cola|colb |datetime |
+----+---------------------+-------------------+
|a |2017-01-01 12:02:00.0|2017-01-01 12:02:00|
|b |2017-02-01 11:22:30 |2017-02-01 11:22:30|
+----+---------------------+-------------------+
scala> a.withColumn("datetime", date_format(col("colb"), "yyyy-MM-dd HH:mm:ss")).printSchema
root
|-- cola: string (nullable = true)
|-- colb: string (nullable = true)
|-- datetime: string (nullable = true)
在上面,我们正在正确的时间戳格式,但是,当我们打印模式,日期时间字段的类型为String,但我需要一个时间戳在这里输入。
现在,如果我试图将该字段强制转换为时间戳,则该格式将设置为微秒精度,这并非意图。
scala> import org.apache.spark.sql.types._
import org.apache.spark.sql.types._
scala> val a = sc.parallelize(List(("a", "2017-01-01 12:02:00.0"), ("b", "2017-02-01 11:22:30"))).toDF("cola", "colb")
a: org.apache.spark.sql.DataFrame = [cola: string, colb: string]
scala> a.withColumn("datetime", date_format(col("colb").cast(TimestampType), "yyyy-MM-dd HH:mm:ss").cast(TimestampType)).show(false)
+----+---------------------+---------------------+
|cola|colb |datetime |
+----+---------------------+---------------------+
|a |2017-01-01 12:02:00.0|2017-01-01 12:02:00.0|
|b |2017-02-01 11:22:30 |2017-02-01 11:22:30.0|
+----+---------------------+---------------------+
scala> a.withColumn("datetime", date_format(col("colb").cast(TimestampType), "yyyy-MM-dd HH:mm:ss").cast(TimestampType)).printSchema
root
|-- cola: string (nullable = true)
|-- colb: string (nullable = true)
|-- datetime: timestamp (nullable = true)
我所期待是格式是在yyyy-MM-dd HH:mm:ss
,也是字段的数据类型事先是timestamp
感谢
你能提供样本字符串字段吗? –
@RameshMaharjan提供和编辑中的示例。 – SrinivasR
如果您投射时间戳毫秒,肯定会追加。所以如果你需要架构作为时间戳,那么你将不得不调整毫秒。如果你不想要毫秒,那么把它保存为字符串。 :) –