繁体   English   中英

NameError:未定义名称“funt1”[在运行“format data-ptransform-40”时]

[英]NameError: name 'funt1' is not defined [while running 'format data-ptransform-40']

我正在运行数据流管道以加载到 biqquery 但出现以下错误

wrapper = lambda x: [fn(x)]

文件“/home/mprabakaran/mergefile.py”,第 93 行,在 <lambda> NameError: name 'funt1' is not defined [while running 'format data-ptransform-40']

我在我的代码中定义了 function 'funt1'

def funt1(row):
    data={}
    data['ID']=row[0]
    if row[1]['gender']:
        data['gender']=row[1]['gender'][0]
    else:
        data['gender']=None
    if row[1]['weight']:
        data['weight']=row[1]['weight'][0]
    else:
        data['weight']=''      
    #print(data)
    return data

下面是管道代码的一部分

       data = (({'gender': gender_data, 'weight': weight_data})
                | 'Merge' >> beam.CoGroupByKey()
                | 'format data' >> beam.Map(lambda x: funt1(x)) | beam.Map(print) )
        beam.io.WriteToBigQuery(
            table_spec2,
            dataset="nyb_data",
            project="toyota-poc-340710",
            # known_args.output,
            # schema='id:INTEGER,gender:STRING,wieght:STRING',
            write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE,
            create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED
            )

不知道我错过了什么。 请帮我解决这个问题。

您必须确保包含 function funt1的 Python 模块已打包并暂存在数据流虚拟机中,以便在运行时可用。 在此处查看说明。

另一种选择是设置save_main_session选项,这会导致 main session(包括加载到会话的函数)可供工作人员使用,但这可能不适用于所有情况。

我在 class 中定义了funt1 function 并调用如下。

| '格式化数据' >> beam.Map(lambda x: dataingestion .funt1(x)) | beam.Map(打印) )

这里的数据摄取是 class。它对我有用。 感谢您回复我的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM