如何在云数据流python管道中读取多种数据存储类型

时间:2018-07-27 15:52:57

标签: google-cloud-platform google-cloud-datastore google-cloud-dataflow apache-beam apache-beam-io

我正在尝试从python管道中的默认名称空间读取多种数据存储类型,并希望对其进行处理。我编写的功能在DirectRunner上可以很好地在本地使用,但是当我使用DataflowRunner在云上运行pipline时,其中一种(包含1500条记录)的读取速度非常快,而另一种(包含数百万条记录)的读取速度却非常慢

作为参考,当我刚尝试在管道中读取一种类型(包含数百万条记录)时,它花费了10分钟,但是当同时执行这两种操作时,它花费了将近1个小时,而它仍然只处理了1/10的记录。

我无法找出问题所在。

这是我的代码

def read_from_datastore(project,user_options, pipeline_options):
  p = beam.Pipeline(options=pipeline_options)
  query = query_pb2.Query()
  query.kind.add().name = user_options.kind   #reading 1st kind this is the one with million records

  students = p | 'ReadFromDatastore' >> ReadFromDatastore(project=project,query=query)

  query = query_pb2.Query()
  query.kind.add().name = user_options.kind2   #reading 2nd kind this is the one with 1500 records

  courses = p | 'ReadFromDatastore2' >> ReadFromDatastore(project=project,query=query)

  open_courses = courses | 'closed' >> beam.FlatMap(filter_closed_courses)
  enrolled_students = students | beam.ParDo(ProfileDataDumpDataFlow(),AsIter(open_courses))

让我知道是否有人对此产生了任何想法。

1 个答案:

答案 0 :(得分:0)

我看到您正在进行两种联接操作。为此目的,如果您export entities to a bucket,然后将其加载到BigQuery,则更快捷。在BigQuery中进行所需的加入操作。

这不是联接实体,它是联接操作。