我正在尝试使用Apache Beam从Google Drive获取文件。我试着,
filenames = ['https://drive.google.com/file/d/<file_id>']
with beam.Pipeline() as pipeline:
lines = (pipeline | beam.Create(filenames))
print(lines)
返回像PCollection[[19]: Create/Map(decode).None]
这样的字符串我需要从谷歌驱动器读取一个文件,并将其写入GCS桶。我如何从Apache beam中读取G驱动器中的文件?
如果您没有复杂的转换应用,我认为在这种情况下最好不要使用Beam
。
- 方案一:
您可以使用Google Collab
(谷歌服务器上的Juypiter笔记本),挂载您的gDrive并使用gCloud CLI复制文件。
您可以查看以下链接:
google-drive-to-gcs
stackoverflow-copy-file-from-google-drive-to-gcs
- 解决方案2
您也可以使用api从Google Drive
检索文件并将它们复制到Cloud Storage
。
Python
Google客户端和以下包开发Python
脚本:
google-api-python-client
google-auth-httplib2
google-auth-oauthlib
google-cloud-storage
这篇文章给出了一个例子。
如果要使用Beam,可以编写一个函数
def read_from_gdrive_and_yield_records(path):
...
然后像
一样使用filenames = ['https://drive.google.com/file/d/<file_id>']
with beam.Pipeline() as pipeline:
paths = pipeline | beam.Create(filenames)
records = paths | beam.FlatMap(read_from_gdrive_and_emit_records)
records | beam.io.WriteToText('gs://...')
如前所述,除非您有很多文件,否则这可能是多余的。