我有一个包含6个字符的字符串,应该将其作为TIME数据类型加载到SQL Server中。 但是spark没有任何时间数据类型。我尝试了几种方法,但数据类型不在时间戳中返回。
我正在以字符串形式读取数据并将其转换为时间戳,然后最终尝试提取时间值,但它又以字符串形式返回值。
df.select('time_col').withColumn("time_col",to_timestamp(col("time_col"),"HHmmss").cast(TimestampType())).withColumn("tim2", date_format(col("time_col"), "HHmmss")).printSchema()
root
|-- time_col: timestamp (nullable = true)
|-- tim2: string (nullable = true)
数据看起来像这样,但是数据类型不同。
df.select('time_col').withColumn("time_col",to_timestamp(col("time_col"),"HHmmss").cast(TimestampType())).withColumn("tim2", date_format(col("time_col"), "HHmmss")).show(5)
+-------------------+------+
| time_col| tim2|
+-------------------+------+
|1970-01-01 14:44:51|144451|
|1970-01-01 14:48:37|144837|
|1970-01-01 14:46:10|144610|
|1970-01-01 11:46:39|114639|
|1970-01-01 17:44:33|174433|
+-------------------+------+
有什么办法可以在timestamp列或与SQL Server的TIME数据类型等效的列中获取tim2列?
答案 0 :(得分:0)
在scala中,python将类似于:
scala> val df = Seq("144451","144837").toDF("c").select('c.cast("INT").cast("TIMESTAMP"))
df: org.apache.spark.sql.DataFrame = [c: timestamp]
scala> df.show()
+-------------------+
| c|
+-------------------+
|1970-01-02 17:07:31|
|1970-01-02 17:13:57|
+-------------------+
scala> df.printSchema()
root
|-- c: timestamp (nullable = true)
答案 1 :(得分:0)
我认为您不会得到想要做的事情,PySpark中没有类型来处理“ HH:mm:ss”,请参见:What data type should be used for a time column
我建议您将其用作字符串。
答案 2 :(得分:0)
就我而言,我曾经在spark中转换为时间戳,并且在发送到SQL Server之前只是将其设置为字符串..它对我来说很好用。