Кадр данных Polars имеет метод df.write_json(). Я думал, что возьму вывод json из этого метода и прочитаю его обратно через библиотеку python json, чтобы он стал сериализуемым в формате json словарем. Тогда я бы как-нибудь прикрепил этот «кодер» к методу pydantic json. Для процесса десериализации я бы использовал метод pl.read_json() для создания кадра данных.
К сожалению, в документации pydantic я могу рассказать, как написать собственный сериализатор для именованного поля, но не для заданного типа.
Существует несколько документов по сериализации подклассов путем введения __get_pydantic_core_schema__, но я бы предпочел избегать этого подхода, поскольку я хотел бы иметь возможность использовать классы Polars напрямую.
Вот пример, где в настоящее время Foo().model_dump_json() приводит к ошибке PydanticSerializationError: невозможно сериализовать неизвестный тип: ошибка.
Код: Выделить всё
from typing import Any
from pydantic import BaseModel
import polars as pl
import json
df = pl.DataFrame({"foo":[1,2,3], "bar":[4,5,6]})
df.write_json() # this produces a json representation of my dataframe
# {"columns":[{"name":"foo","datatype":"Int64","bit_settings":"","values":[1,2,3]},{"name":"bar","datatype":"Int64","bit_settings":"","values":[4,5,6]}]}
# I could use pl.read_json() to read it back into a dataframe.
def json_serializable_dataframe(df: pl.DataFrame) -> dict[str, Any]:
"Load serialized dataframe into a serializable dict."
return json.loads(df.write_json())
class Foo(BaseModel, arbitrary_types_allowed=True):
df: pl.DataFrame = pl.DataFrame({"foo":[1,2,3], "bar":[4,5,6]})
Foo().model_dump_json() # how to incorporate my json_serializable_dataframe encoder here?
Подробнее здесь: https://stackoverflow.com/questions/776 ... -basemodel
Мобильная версия