【问题标题】:How to write a Dask dataframe containing a column of arrays to a parquet file如何将包含一列数组的 Dask 数据帧写入镶木地板文件
【发布时间】:2018-07-25 10:58:32
【问题描述】:

我有一个 Dask 数据框,其中一列包含一个 numpy 浮点数组:

import dask.dataframe as dd
import pandas as pd
import numpy as np

df = dd.from_pandas(
    pd.DataFrame(
        {
            'id':range(1, 6),
            'vec':[np.array([1.0, 2.0, 3.0, 4.0, 5.0])] * 5
        }), npartitions=1)

df.compute()

   id                        vec
0   1  [1.0, 2.0, 3.0, 4.0, 5.0]
1   2  [1.0, 2.0, 3.0, 4.0, 5.0]
2   3  [1.0, 2.0, 3.0, 4.0, 5.0]
3   4  [1.0, 2.0, 3.0, 4.0, 5.0]
4   5  [1.0, 2.0, 3.0, 4.0, 5.0]

如果我尝试将其写成镶木地板,则会出现错误:

df.to_parquet('somefile')
....
Error converting column "vec" to bytes using encoding UTF8. Original error: bad argument type for built-in operation

我认为这是因为“vec”列的类型为“object”,因此 parquet 序列化程序尝试将其写为字符串。有没有办法告诉 Dask DataFrame 或序列化器该列是一个浮点数组?

【问题讨论】:

标签: python dask fastparquet


【解决方案1】:

我发现如果使用 pyarrow 引擎而不是默认的 fastparquet 是可能的:

pip/conda install pyarrow

然后:

df.to_parquet('somefile', engine='pyarrow')

https://github.com/dask/fastparquet/ 的 fastparquet 文档说“只支持简单的数据类型和纯编码”,所以我猜这意味着没有数组。

【讨论】:

  • 感谢@junichiro - 我使用了导致错误的FIXED_BYTE_ARRAY,这似乎是一个相当基本的类型。我无法找到关于“简单数据类型”究竟是什么的文档 - 如果有人知道请分享!
猜你喜欢
  • 2021-03-26
  • 2018-06-24
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 2019-02-11
  • 2019-07-25
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多