如何将parquet文件的int64数据类型列转换为sparksqlDataframe中的时间戳?

ulmd4ohb  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(424)

这里我的数据框如下所示:

+----------------+-------------+
|   Business_Date|         Code|
+----------------+-------------+
|1539129600000000|          BSD|
|1539129600000000|          BTN|
|1539129600000000|          BVI|
|1539129600000000|          BWP|
|1539129600000000|          BYB|
+----------------+-------------+

我想把 Business_Date 列自 biginttimestamp 将数据加载到配置单元表时的值。
我该怎么做?

5w9g7ksd

5w9g7ksd1#

你可以用 pyspark.sql.functions.from_unixtime() 哪个会
将unix epoch(1970-01-01 00:00:00 utc)中的秒数转换为表示当前系统时区中该时刻的时间戳的字符串,格式为给定格式。
看来你的 Business_Date 需要除以1米才能转换为秒。
例如:

from pyspark.sql.functions import from_unixtime, col

df = df.withColumn(
    "Business_Date",
    from_unixtime(col("Business_Date")/1000000).cast("timestamp")
)
df.show()

# +---------------------+----+

# |Business_Date        |Code|

# +---------------------+----+

# |2018-10-09 20:00:00.0|BSD |

# |2018-10-09 20:00:00.0|BTN |

# |2018-10-09 20:00:00.0|BVI |

# |2018-10-09 20:00:00.0|BWP |

# |2018-10-09 20:00:00.0|BYB |

# +---------------------+----+

``` `from_unixtime` 返回一个字符串,以便将结果强制转换为 `timestamp` .
现在是新模式:

df.printSchema()

root

|-- Business_Date: timestamp (nullable = true)

|-- Code: string (nullable = true)

相关问题