Pyarrow Table.from_pandas更改提供的架构

时间:2018-12-20 01:10:31

标签: python pandas pyarrow

我有一个使用Python(3.6)/ Pandas(0.23.4)构造的增量填充分区实木复合地板表。经过大约50个分区后,我有了一个pandas数据框,其中包含完全是NaN的列。我从发现的第一个分区中获取架构,并将其分配给pyarrow Table:

sschema = _retrieve_schema(root_path) if isinstance(fs, pa.LocalFileSystem) else None

for keys, subgroup in data_df.groupby(partition_keys):
    if not isinstance(keys, tuple):
        keys = (keys,)
    subdir = "/".join(
        ["{colname}={value}".format(colname=name, value=val)
         for name, val in zip(partition_cols, keys)])
    subtable = Table.from_pandas(subgroup, schema=sschema, preserve_index=preserve_index, nthreads=nthreads)

结果表上的模式与提供给from_pandas方法的模式不匹配。具有NaN的列具有正确的float64 pandas_type。但是,numpy类型已从float64更改为object。有人知道解决方法吗?

**编辑** 我尝试了Table对象的实验性replace_schema_metadata方法,当在Windows上的本地IPython控制台中运行时,似乎可以解决该问题。当我转移到Linux(相同的python / pandas版本)上的Jupyter笔记本时,仍然使用相同的数据(即,将木地板文件scp'到运行笔记本的主机上),仍然存在相同的问题。

在pyarrow 0.9.0和0.10.0之间似乎发生了更改,阻止了正确读取具有全部NaN列的分区的模式,从而导致pandas.read_parquet失败

0 个答案:

没有答案