【问题标题】:Import Dask Dataframe into Bigquery Table?将 Dask Dataframe 导入 Bigquery 表?
【发布时间】:2021-09-20 08:23:17
【问题描述】:

是否有任何技术可以将 dask 数据帧上传到 bigquery 表中? 据我所知,Bigquery 支持 pandas。

假设我们有 df 作为 pandas 数据框:

from google.cloud import bigquery
bq_table_path=`project_id.dataset_id.table_name`
bigquery_client=bigquery.client(project=project_id)
bigquery_client.load_table_from_dataframe(df,bq_table_path)

在 dask 数据框中呢? 我收到以下错误:

NotImplemented Error: series getitem is only supported for other series objects with matching partition structure"

有什么建议吗?

【问题讨论】:

    标签: python pandas google-bigquery dask


    【解决方案1】:

    我最近制作了一些原型,你可以在这个关于 github 问题 https://github.com/coiled/dask-bigquery/issues/3#issuecomment-896350178 的评论中找到它,但如果你继续阅读讨论,这个实现存在一些限制,主要与数据的大小有关。 如果您有大量数据并且可以依赖中间存储并使用镶木地板,则可以尝试遵循此要点上的解决方案https://gist.github.com/bnaul/4819f045ccbee160b60a530b6cfc0c98#file-dask_bigquery-py-L188-L271

    【讨论】:

      【解决方案2】:

      这并不理想,但一种可能性是通过以下方式使其成为串行过程:

      for df_subset in df.partitions:
          df_pandas = df_subset.compute()
          bigquery_client.load_table_from_dataframe(df_pandas,bq_table_path)
      

      但是,在许多情况下,由于数据传输和一次一个处理,这可能非常低效。

      【讨论】:

      • 为什么不map_partitions
      • 啊,我不确定 bigquery 是否支持并行写入...现在考虑一下,我想它应该...所以在这种情况下,map_partitions 是一个更好的解决方案。
      • 如果我们使用map_partitions,我们需要分配列吗?这个过程应该是自动化的。在上面的例子中有任何例子来说明map_partitions吗?
      • df.paritions 占用大量内存。是否有其他技术可以支持更多 TB 数据?
      猜你喜欢
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 2018-03-30
      • 2016-07-18
      • 1970-01-01
      • 2017-10-01
      相关资源
      最近更新 更多