我找到了一些关于如何将各种数据类型从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,...
很明显,这些值是我得到的文本,但它们显示为 array
的 int
而不是期望的 str
. 我没有看到任何迹象表明这是正常的行为。这是Pig在天蓝上的行为吗?一些容易改变的东西?
暂无答案!
目前还没有任何答案,快来回答吧!