Python BigQuery库load_table_from_dataframe方法RLE解码错误求助
解决BigQuery load_table_from_dataframe的RLE解码字符串列异常
针对你遇到的google.api_core.exceptions.BadRequest: 400 Error while reading data, error message: Failed to import values for column 'status': Unexpected end of stream: RLE Decoding retrieved less values: 0 then num values: 113异常,给出以下可行解决方案:
强制统一字符串列数据类型
pandas自动推断的列类型可能存在内部存储问题,强制将目标列转为object类型并清空无效值:import pandas as pd df['status'] = df['status'].astype(str).replace('nan', '', regex=False)清理字符串中的特殊控制字符
换行符、回车符等不可见字符会干扰BigQuery的RLE解码逻辑,批量清理这类字符:import re df['status'] = df['status'].apply( lambda x: re.sub(r'[\n\r\t\x00-\x1F]', '', str(x)) if pd.notna(x) else '' )改用CSV中间文件加载
绕开pandas与BigQuery库之间的直接数据转换,先导出为CSV再加载:from google.cloud import bigquery import io client = bigquery.Client() table_ref = client.dataset("your_dataset").table("your_table") # 导出DataFrame到内存CSV csv_buffer = io.StringIO() df.to_csv(csv_buffer, index=False, na_rep='') csv_buffer.seek(0) # 配置加载任务 job_config = bigquery.LoadJobConfig( skip_leading_rows=1, source_format=bigquery.SourceFormat.CSV, schema=[bigquery.SchemaField("status", "STRING")] # 补充其他字段 ) # 执行加载 load_job = client.load_table_from_file(csv_buffer, table_ref, job_config=job_config) load_job.result()校验目标表Schema匹配性
确认BigQuery目标表的status列类型为STRING,避免类型不匹配导致解码失败:table = client.get_table(table_ref) for field in table.schema: print(f"{field.name}: {field.field_type}")若类型不符,先修改表Schema后再重新加载数据。
内容的提问来源于stack exchange,提问作者Alejandro Dinamarca
相关产品推荐
相关产品推荐

