pig字符串进入python udf

jgwigjjp  于 2021-06-25  发布在  Pig
关注(0)|答案(0)|浏览(299)

我找到了一些关于如何将各种数据类型从python返回到pig的帖子,但是我还没有看到任何关于python udfs在pig发送数据时接收到什么的有用文档,我希望有人能帮我澄清这个问题。具体来说,我的字符串不是python str azure上的值(0.12)。
我有一个简单的数据集,我分组:

records = LOAD 'path/to/file.tsv';
grp = GROUP records BY $0;
DUMP grp;
(John,{(John,Smith,123 Main St,john@smith.com)})
(Jane,{(Jane,Doe,456 7th St,jane@doe.com)},(Jane,Doe,789 First Ave,jane@doe.com)})
<and so on>

当我创建我的自定义项时,我会尝试返回一些可以给我提示的内容:

def foo(input):
    if type(input) == str: return input
    if type(input) == int: return str(input)

    try:
        rep = ', '.join([ foo(field) for field in input])
        return "[" + str(type(input)) + ": " + rep + "]"
    except:
        # input isn't iterable
        return str(type(input))

所以我把数据传进来:

REGISTER 'path/to/myUdfs.py' USING jython AS myUdfs;
fooResults = FOREACH grp GENERATE myUdfs.foo($1);

实验结果表明,在这两种情况下 str 值,而不是整数数组:

([<type 'list'>: [<type 'tuple'>: [<type 'array.array'>: 74, 111, 104, 110],  <type 'NoneType'>, [<type 'array.array'>: 83, 109,...

很明显,这些值是我得到的文本,但它们显示为 arrayint 而不是期望的 str . 我没有看到任何迹象表明这是正常的行为。这是Pig在天蓝上的行为吗?一些容易改变的东西?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题