Dom*_*den 5 python timestamp pandas parquet pyarrow
我有一些带有时间戳的 spark(scala) 数据帧/表,它们来自我们的 DHW,有时会使用一些高水印。
我想在 python 中使用 Pandas 处理这些数据,所以我将它们写为 spark 中的镶木地板文件,然后用 Pandas 再次读取。问题是 pandas/pyarrow 无法处理时间戳。这些转换为dateTime64[ns],女巫可以容纳的日期范围有限。所以一些时间戳(尤其是所有高水位标记)会得到错误的条目。
我如何强制熊猫将时间戳解释dateTime[mu]为例如。或者将高(和低)水印设置为 NAN 而不是仅使用错误的转换值?
这是一个最小的代码示例:
火花:
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
val df_spark = Seq(
(1, "1050-01-01 23:00:01"),
(2, "2014-11-30 12:40:32"),
(3, "2016-12-29 09:54:00"),
(4, "2500-01-01 00:00:00")).toDF("id", "date-string")
.withColumn("valid_to", to_timestamp(col("date-string")))
df_spark.repartition(1).write.parquet("timestamptest")
df_spark.show
+---+-------------------+-------------------+
| id| date-string| valid_to|
+---+-------------------+-------------------+
| 1|1050-01-01 23:00:01|1050-01-01 23:00:01|
| 2|2014-11-30 12:40:32|2014-11-30 12:40:32|
| 3|2016-12-29 09:54:00|2016-12-29 09:54:00|
| 4|2500-01-01 00:00:00|2500-01-01 00:00:00|
+---+-------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)
在 Python 中读取时:
import pandas as pd
df_pandas= pd.read_parquet("timestamptest")
df_pandas.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 4 non-null int32
1 date-string 4 non-null object
2 valid_to 4 non-null datetime64[ns]
dtypes: datetime64[ns](1), int32(1), object(1)
memory usage: 208.0+ bytes
df_pandas
id date-string valid_to
0 1 1050-01-01 23:00:01 2219-02-16 22:09:08.419103232
1 2 2014-11-30 12:40:32 2014-11-30 12:40:32.000000000
2 3 2016-12-29 09:54:00 2016-12-29 09:54:00.000000000
3 4 2500-01-01 00:00:00 1915-06-14 00:25:26.290448384
Run Code Online (Sandbox Code Playgroud)
你现在看到第一个和最后一个时间采样是错误的。如果我用火花再次阅读拼花,一切都很好。
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |