pyarrow.lib.ArrowInvalid: («Не удалось преобразовать X с типом Y: не распознал тип значения Python при выводе типа данных Arrow») - PullRequest
2 голосов
/ 08 января 2020

Используя pyarrow для преобразования pandas.DataFrame, содержащего Player объектов, в pyarrow.Table со следующим кодом

import pandas as pd
import pyarrow as pa

class Player:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def __repr__(self):
        return f'<{self.name} ({self.age})>'

data = [
    Player('Jack', 21, 'm'),
    Player('Ryan', 18, 'm'),
    Player('Jane', 35, 'f'),
]
df = pd.DataFrame(data, columns=['player'])
print(pa.Table.from_pandas(df))

мы получаем ошибку:

pyarrow.lib.ArrowInvalid: ('Could not convert <Jack (21)> with type Player: did not recognize Python value type when inferring an Arrow data type', 'Conversion failed for column 0 with type object')

Та же ошибка возникла при использовании

df.to_parquet('players.pq')

Возможно ли для pyarrow отступить к сериализации этих Python объектов с использованием pickle? Или есть лучшее решение? pyarrow.Table в конечном итоге будет записан на диск с помощью Parquet.write_table().

  • с использованием Python 3.8.0, pandas 0.25.3, пиарроу 0,13.0.
  • pandas.DataFrame.to_parquet() не поддерживает мультииндекс, поэтому предпочтительным является решение, использующее pq.write_table(pa.Table.from_dataframe(pandas.DataFrame)).

Спасибо!

...