将 NaN 浮点数转换为 Parquet 格式的其他类型

Converting NaN floats to other types in Parquet format

我目前正在处理一堆 CSV 文件并将它们转换为 Parquet。我将这些与 Hive 一起使用并直接查询文件。我想切换到 Dask 进行数据处理。我正在阅读的数据有可选列,其中一些是布尔类型。我知道 Pandas 目前不支持可选的 bool 类型,但是无论如何要为 FastParquet 或 PyArrow 指定我希望字段是什么类型?我对我的 DF 中的数据是 float64 没意见,但由于现有文件已经是可选的布尔类型,所以不能在我的 Parquet 存储中使用它。

您应该尝试使用 fastparquet 引擎和以下关键字参数

object_encoding={'bool_col': 'bool'}

此外,pandas 现在允许使用 nans 作为扩展类型的布尔列,但它还不是完全默认的。那应该可以直接工作。

例子

import fastparquet as fp
df = pd.DataFrame({'a': [0, 1, 'nan']})
fp.write('out.parq', df, object_encoding={'a': 'bool'})
fp.write('out.parq', df.astype(float), object_encoding={'a': 'bool'})