pandas - 不必要的 .list.item 嵌套在 pyarrow 上传数据框中的 BigQu

所以我将这个表上传到 BigQuery 中

job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.PARQUET
job_config.write_disposition = "WRITE_TRUNCATE"
pq_opt = ParquetOptions()
pq_opt.enable_list_inference = True
job_config.parquet_options = pq_opt  
job = self.client.load_table_from_file(source_file, table_ref, job_config=job_config)

比如说,我有一个 pa.schema,其中包含以下类型的条目:

("image_id", pa.list_(pa.string())),

并按照 this question 中的建议我使用 enable_list_inference。在使用 enable_list_inference 之前,BQ 中的架构如下所示:

Schema without list inference

在我使用它之后我得到:

Schema with list inference

那么我丢失列表部分而不是项目部分的原因是什么?我正在传递一个在某些行中包含列表的普通数据框。我怎样才能放弃 .item 部分,而只有一列重复的条目?

最佳答案

评论变得太长了,但这里可能会发生两件事(不确定修复其中任何一个是否有帮助,但值得尝试)。

  • Pyarrow 默认假定列为 nullable .您可以尝试使顶级不可为空(和/或内部字符串元素不可为空),如果它们实际上不能有空值,这应该改变模式推断。 BQ 需要维护中间记录(类似于 parquet)来处理可能也为 null 的重复元素。

  • 要尝试的第二件事是设置 use_compliant_nested_types=True在编写 pyarrow 表时。这会将内部元素从“item”更改为“element”,这是根据 parquet specification 的正确名称.这也可能会影响事情。 (BigQuery 应该支持其中任何一个,所以我认为第一个选项更有可能起作用)。

关于pandas - 不必要的 .list.item 嵌套在 pyarrow 上传数据框中的 BigQuery 模式中,列表作为列。 enable_list_inference 部分有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68303327/

相关文章:

python - numpy 中如何实现多维数组切片/索引?

django - 如何在基于 Django 类的 View 中更改模板

serialization - 使用#[serde(untagged)] 和#[serde(with

python - python模块上的cprofile

ansible - 如何在ansible替换模块中转义+字符

python - 通用协议(protocol) : mypy error: Argument 1 h

reactjs - 如何在 primereact 中拥有主题切换器

x86-64 - AVX512 与矢量比较不屏蔽

kubernetes - 部署后如何在 kubernetes 中删除 Traefik 2.0 中间件

api - 通过 Bitbucket REST API 获取所有 Pull-Request 评论