使用Python和Apache Beam

时间:2018-11-21 00:20:24

标签: python google-cloud-dataflow apache-beam

使用Apache Beam和Dataflow是我的新手。我想将数据集用作将使用Dataflow并行部署的功能的输入。这是我到目前为止的内容:

import os
import apache_beam as beam
from apache_beam.options.pipeline_options import SetupOptions
from apache_beam.options.pipeline_options import PipelineOptions
from apache_beam.options.pipeline_options import StandardOptions
from apache_beam.options.pipeline_options import GoogleCloudOptions

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '[location of json service credentails]'

dataflow_options = ['--project=[PROJECT NAME]',
                    '--job_name=[JOB NAME]',
                    '--temp_location=gs://[BUCKET NAME]/temp',
                    '--staging_location=gs://[BUCKET NAME]/stage']
options = PipelineOptions(dataflow_options)
gcloud_options = options.view_as(GoogleCloudOptions)
options.view_as(StandardOptions).runner = 'dataflow'

with beam.Pipeline(options=options) as p:
     new_p = p | beam.io.ReadFromText(file_pattern='[file location].csv',
                                      skip_header_lines=1)
               | beam.ParDo([Function Name]())

CSV文件将具有4列和n行。每行代表一个实例,每列代表该实例的参数。我想将实例的所有参数都放到beam.DoFn中,这样我就可以借助数据流在多台机器上运行它。

如何获得一个写函数以从PCollection中获取多个参数?下面的功能是我想象的那样。

class function_name(beam.DoFn):
    def process(self, col_1, col_2, col_3, col_4):
    function = function(col_1) + function(col_2) + function(col_3) + function(col_4)
    return [function]

1 个答案:

答案 0 :(得分:1)

ReadFromText的物化返回将是一个PCollection,其中该字符串仍是定界的。

您的ParDo应该采用String元素,然后进行拆分,然后将其拆分为col名称和值的Dict。