1

跟进这个问题;保存笨拙1数组的最佳方法?

保存多列嵌套的尴尬1 数组(长度不同);

import awkward1 as ak
dog = ak.from_iter([[1, 2], [5]])
cat = ak.from_iter([[4]])
pets = ak.zip({"dog": dog[np.newaxis], "cat": cat[np.newaxis]}, depth_limit=1)

ak.to_parquet(pets, "pets.parquet")

不幸的是,这似乎不适用于平面列表。

import awkward1 as ak
dog = ak.from_iter([1, 2, 5])
cat = ak.from_iter([4])
pets = ak.zip({"dog": dog[np.newaxis], "cat": cat[np.newaxis]}, depth_limit=1)

ak.to_parquet(pets, "pets.parquet")

创建错误;

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-31-7f3a7fefb261> in <module>
      3 cat = ak.from_iter([3])
      4 pets = ak.zip({"dog": dog[np.newaxis], "cat": cat[np.newaxis]}, depth_limit=1)
----> 5 ak.to_parquet(pets, "pets.parquet")

~/Programs/anaconda3/envs/tree/lib/python3.7/site-packages/awkward/operations/convert.py in to_parquet(array, where, explode_records, list_to32, string_to32, bytestring_to32, **options)
   2983     layout = to_layout(array, allow_record=False, allow_other=False)
   2984     iterator = batch_iterator(layout)
-> 2985     first = next(iterator)
   2986
   2987     if "schema" not in options:

~/Programs/anaconda3/envs/tree/lib/python3.7/site-packages/awkward/operations/convert.py in batch_iterator(layout)
   2978                 )
   2979             yield pyarrow.RecordBatch.from_arrays(
-> 2980                 pa_arrays, schema=pyarrow.schema(pa_fields)
   2981             )
   2982

~/Programs/anaconda3/envs/tree/lib/python3.7/site-packages/pyarrow/table.pxi in pyarrow.lib.RecordBatch.from_arrays()

TypeError: object of type 'pyarrow.lib.Tensor' has no len()

遇到此错误的原因是什么?

4

1 回答 1

2

您发现的是一个错误,现在已修复:https ://github.com/scikit-hep/awkward-1.0/pull/799

这里发生的情况是 pyarrow 无法将pyarrow.lib.Tensor(常规长度列表,例如您创建的列表np.newaxis)写入 Parquet 文件。Parquet 文件没有“常规长度列表”的概念,所以这是有道理的。但是,pyarrow 没有转换它,而是遇到了一个未处理的情况,在这种情况下,它无法找到 that 的长度pyarrow.lib.Tensorpyarrow.lib.Tensor(没有方法有点奇怪__len__,但那是另一回事。)

无论如何,对于 Awkward Array 的 1.2.0 版本,我们将在写入 Parquet 时简单地将常规长度列表转换为(原则上)可变长度列表,因为该格式没有那种类型。按照计划,1.2.0版本将于明天发布。(此错误修复可能是最后一个预发布版本。)

于 2021-03-31T17:40:40.690 回答