将 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