将 Pandas Dataframe 转换为 Parquet 失败:列表子类型字符串溢出单个块的容量

Posted

技术标签:

【中文标题】将 Pandas Dataframe 转换为 Parquet 失败:列表子类型字符串溢出单个块的容量【英文标题】:Convert Pandas Dataframe to Parquet Failed: List child type string overflowed the capacity of a single chunk 【发布时间】:2021-12-10 04:54:40 【问题描述】:

我像往常一样将 pandas 数据框写入镶木地板文件,

突然跳出一个异常pyarrow.lib.ArrowInvalid如下:

List child type string overflowed the capacity of a single chunk,
Conversion failed for column image_url with type object

我正在使用 pyarrow 0.17.0、pandas 1.2.0 我知道这些是旧版本,但我不知道发生了什么。

这个“溢出单个块的容量”是什么意思?

指示的列image_url 是否可能包含破坏逻辑的数据?

【问题讨论】:

【参考方案1】:

在编写 parquet 时,必须首先将数据框转换为箭头表。箭头表中的列是分块数组。每个块是一个数组。

在箭头中,单个字符串数组必须包含少于 2GB 的数据。应该发生的事情(并且可能在较新的版本中已修复)是​​字符串数组应转换为具有许多块(每个块包含 2GB)的分块数组,因此不应该发生这种情况。

如果无法升级,则可以自己切片数据帧并分段写入。

如果您在最新版本上仍然遇到此错误,则应提交 JIRA 票证。

【讨论】:

【参考方案2】:

感谢@Pace 的回答,我们升级到最新版本 5.0.0 后,这个问题就解决了。

【讨论】:

以上是关于将 Pandas Dataframe 转换为 Parquet 失败:列表子类型字符串溢出单个块的容量的主要内容,如果未能解决你的问题,请参考以下文章

将 pyspark groupedData 转换为 pandas DataFrame

如何将 sql 查询转换为 Pandas Dataframe 和 PySpark Dataframe

使用 pandas_udf 将 Spark Structured DataFrame 转换为 Pandas

将 pandas.core.groupby.SeriesGroupBy 转换为 DataFrame

python 将Numpy数组转换为Pandas Dataframe

如何将 scala spark.sql.dataFrame 转换为 Pandas 数据框