python - 如何使用 GCS compose 方法正确连接 CSV 文件?

标签 python csv google-cloud-platform google-cloud-storage

我正在尝试使用 GCS compose() 方法将多个 CSV 组合成一个 CSV。
目标是使用 Python 的多处理模块来处理大型 CSV 文件,而无需将所有数据存储在一个地方,直到它到达 GCS。目的是在对这些大文件进行操作时使用尽可能少的内存。例如:文件被分成 4 个部分,每个子进程一个,对数据完成工作,每个子进程将文件的 1/4 上传到 GCS,其中 compose 方法将组合四个文件中的每一个以创建一个 CSV。
Pandas 不起作用,因为我试图避免将数据全部放在一个地方(消耗了太多内存)。
以下是我在最后尝试合并 CSV 时遇到的问题。
CSV 1:

col1,col2,col3
1,2,3
1,2,3
1,2,3
CSV 2:
col4,col5,col6
4,5,6
4,5,6
4,5,6
当我使用 GCS API 中的 compose() 方法时,我在目标文件中得到了这个结果:
col1,col2,col3
1,2,3
1,2,3
1,2,3
col4,col5,col6
4,5,6
4,5,6
4,5,6
但我正在寻找的是:
col1,col2,col3,col4,col5,col6
1,2,3,4,5,6
1,2,3,4,5,6
1,2,3,4,5,6
产生的代码:
bucket = STORAGE_CLIENT.bucket(bucket_name)
destination = bucket.blob(destination_blob_name)
destination.content_type = "text/csv"
destination.compose(sources)
有没有人对我如何以我想要的方式合并 CSV 有任何建议?

最佳答案

因为 Cloud Storage compose 无法实现你想要的(compose 很笨,它需要一个文件并将以下内容附加到前一个文件中!),如果你有大量数据,我建议你使用大查询!

  • 在您拥有的每种文件类型上创建一个联合表
  • 执行 extract data 查询
  • EXPORT DATA OPTIONS(
      uri='gs://my_bucket/*.csv',
      format='CSV',
      overwrite=true,
      header=true,
      field_delimiter=',') AS
    SELECT * FROM `my_federated_table` JOIN/UNION ....
    
    您将在输出中有多个文件,但格式正确。如果您只想输出一个文件,请将 header 设置为 false 并使用 compose 合并文件。

    关于python - 如何使用 GCS compose 方法正确连接 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64373119/

    相关文章:

    python - 将数据帧字典写入文件

    javascript - 添加/更新 CSV 文件特定行中的数据

    csv - 使用 Julia 从 txt 中读取路径列表并打开它

    python - 在 Python 中创建多项式类

    python neurolab 前馈神经网络

    python-3.x - 当我尝试在 GCP 上导入 NumPy 库时,如何修复出现的 Python 错误 "...failed to map segment from shared object"?

    node.js - GCP Secret Manager 抛出 : "path" argument must be of type string

    kubernetes - GCP/GKE 上的私有(private) Kubernetes 集群上的 Tekton

    python - 有效地将 DataFrame 列转换为对象

    MySQL:将csv导入带引号的表中