自定义函数python在pig中给出了不同的答案

2021-09-27 05:19:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为pig编写一个UDF python,从名为like的文件中读取行

#'prefix.csv' 
spol.
LLC 
Oy
OOD

并匹配名称,如果找到匹配项,则将其替换为空白。这是我的python代码

def list_files2(name, f):
    fin = open(f, 'r')
    for line in fin:
        final = name
        extra = 'nothing'
        if (name != name.replace(line.strip(), ' ')):
            extra = line.strip()
            final = name.replace(line.strip(), ' ').strip()
            return final, extra,'insdie if'
    return final, extra, 'inside for'

用python运行这个代码

>print list_files2('LLC nakisa', 'prefix.csv' )
>print list_files2('AG company', 'prefix.csv' )

退货

 ('nakisa', 'LLC', 'insdie if')
 ('AG company', 'nothing', 'inside for')

这正是我需要的。但是当我在apache pig中将此代码注册为这个示例列表的一个UDF时:

nakisa company LLC
three Oy 
AG Lans 
Test OOD

猪在第三行返回错误答案:

((nakisa company,LLC,insdie if))
((three,Oy,insdie if))
((A G   L a n s,,insdie if))
((Test,OOD,insdie if))

问题是为什么UDF为第三个条目进入if循环,而第三个条目中没有任何匹配项前缀.csv文件。你知道吗