有什么方法可以在pyspark中处理时间?

时间:2020-07-08 13:03:25

标签: apache-spark pyspark databricks

我有一个包含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列?

3 个答案:

答案 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之前只是将其设置为字符串..它对我来说很好用。