我想使用sparksql(pyspark)从我的数据中运行一个简单的时间戳字段sql选择。但是,所有时间戳字段显示为1970-01-19 10:45:37.009。所以看起来我在胶水中的时间戳和spark中的时间戳之间有一些转换不兼容。
我用pyspark运行,并且我有glue目录配置,所以我从glue获取数据库模式。在glue和sparksqlDataframe中,这些列都显示为timestamp类型。
但是,当我从s3路径读取Parquet文件时,event\u time列(例如)的类型是long,当我得到它的数据时,我得到了一个正确的event\u time,epoch in millishes=1593938489000。所以我可以转换它,得到实际的日期时间。
但是当我运行spark.sql时,event\u time列会得到timestamp类型,但它没有用处,而且缺少精度。所以我得到这个=1970-01-19 10:45:37.009。当我在athena中运行相同的sql查询时,timestamp字段看起来很好,因此我在glue中的模式看起来是正确的。
有办法克服吗?我没有找到任何spark.sql配置来解决这个问题。
1条答案
按热度按时间ghhkc1vu1#
由于格式化方式不正确,您将获得1970。请尝试下面的代码将long转换为utc时间戳
转换时:1593938489000