You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyArrow CSV转Parquet时无效UTF8报错定位错误行及处理方法问询

PyArrow读取CSV遇无效UTF-8字符的解决方案

1. 定位具体报错行

PyArrow的read_csv函数提供了invalid_row_handler参数,可以自定义处理异常行并收集行号,示例代码如下:

import pyarrow as pa
import pyarrow.csv as csv

# 存储异常行号
invalid_rows = []

def handle_invalid_row(row):
    # row.number对应CSV的行号,默认从1开始计数(包含表头行)
    invalid_rows.append(row.number)
    # 跳过当前异常行继续读取
    return pa.csv.InvalidRowResult.SKIP

# 配置解析选项
parse_options = csv.ParseOptions(invalid_row_handler=handle_invalid_row)
# 读取CSV
table = csv.read_csv("your_large_file.csv", parse_options=parse_options)

# 输出所有异常行号
print("异常行号:", invalid_rows)

2. 直接替换无效UTF-8单元格为NULL

方案1:高版本PyArrow(12.0+)直接配置转换选项

通过ConvertOptions的invalid_utf8_handling参数处理无效字符,后续可按需转NULL:

import pyarrow.csv as csv
import pyarrow.compute as pc

convert_options = csv.ConvertOptions(
    # 无效UTF-8字符替换为�,避免读取报错
    invalid_utf8_handling="replace"
)
table = csv.read_csv("your_large_file.csv", convert_options=convert_options)

# 可选:将含无效字符的单元格转为NULL
col_index = 9 # 对应报错的第10列,索引从0开始
col = table.column(col_index)
is_valid_utf8 = pc.utf8_is_valid(col)
clean_col = pc.if_else(is_valid_utf8, col, None)
table = table.set_column(col_index, table.field(col_index).name, clean_col)

方案2:低版本PyArrow兼容处理

先将报错列按二进制类型读取,再手动转UTF-8并替换无效值:

import pyarrow as pa
import pyarrow.csv as csv
import pyarrow.compute as pc

convert_options = csv.ConvertOptions(
    # 把报错的第10列先按二进制读取,避免编码报错
    column_types={"your_column_name": pa.binary()}
)
table = csv.read_csv("your_large_file.csv", convert_options=convert_options)

# 转UTF-8,无效字符直接置为NULL
col_index = 9
clean_col = pc.utf8_replace_invalid(table.column(col_index), replacement_char=None)
table = table.set_column(col_index, "your_column_name", clean_col)

补充:如果确认文件是非UTF-8编码

可以先在读取选项中指定正确编码,从根源解决报错:

read_options = csv.ReadOptions(encoding="gbk") # 可替换为GBK、latin-1等实际编码
table = csv.read_csv("your_large_file.csv", read_options=read_options)

内容的提问来源于stack exchange,提问作者Avinash Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:06:02