【发布时间】:2020-09-24 02:03:54
【问题描述】:
我注意到pandas.to_parquet 生成的 parquet 文件中 timestamp 的列类型可能因 pandas 的版本而异,例如
In [1]: pd.__version__
Out[1]: '1.0.5'
In [2]: pd.DataFrame([pd.Timestamp('2020-01-01')], columns=['a']).to_parquet('/tmp/test.parquet')
In [3]: !parquet-tools schema /tmp/test.parquet
message schema {
optional int64 a (TIMESTAMP_MILLIS);
}
In [4]: !parquet-tools head /tmp/test.parquet
a = 1577836800000
In [1]: pd.__version__
Out[1]: '1.1.2'
In [2]: pd.DataFrame([pd.Timestamp('2020-01-01')], columns=['a']).to_parquet('/tmp/test.parquet')
In [3]: !parquet-tools schema /tmp/test.parquet
message schema {
optional int64 a (TIMESTAMP_MICROS);
}
In [4]: !parquet-tools head /tmp/test.parquet
a = 1577836800000000
如上所示,pandas-1.0.5 将时间戳类型转换为TIMESTAMP_MILLIS,而pandas-1.1.2 将其转换为TIMESTAMP_MICROS。
我正在使用pandas-1.1.2,但我需要类型为TIMESTAMP_MILLIS 用于parquet 文件的下游消费(由Presto 查询),请问该怎么做?
我正在使用pyarrow 引擎。
【问题讨论】: