5

我有一个 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 或序列化器该列是浮点数组吗?

4

1 回答 1

6

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

pip/conda install pyarrow

然后:

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

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

于 2018-02-14T19:21:39.180 回答