通过Apache Beam从G盘读取文件



我正在尝试使用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

例如,您可以使用PythonGoogle客户端和以下包开发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://...')

如前所述,除非您有很多文件,否则这可能是多余的。

相关内容

  • 没有找到相关文章

最新更新