使用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]
答案 0 :(得分:1)
ReadFromText的物化返回将是一个PCollection,其中该字符串仍是定界的。
您的ParDo应该采用String元素,然后进行拆分,然后将其拆分为col名称和值的Dict。