从PIG调用Python UDF

时间:2015-09-18 00:52:55

标签: python apache-pig udf

从PIG LATIN调用Python UDF时遇到问题。我正在进行ASCII到二进制的转换,并在python中编写了一个脚本,它在python shell中运行但是如果我们在PIG中将它称为Python UDF,则会收到一条错误,说明" NameError:全局名称'格式&# 39;未定义"。有人可以告诉我你对此的想法吗?

---- Python脚本

@outputSchema("str:chararray") 
def asciitobinary(st):        
               str = ''.join(format(ord(i),'b').zfill(8) for i in st) 
 return str

- PIG脚本

REGISTER 'asctobin.py' USING jython as pyudf 
A = LOAD 'data.txt' USING PigStorage(); 
B = FOREACH A GENERATE  pyudf.asciitobinary($0); 
DUMP B;
Input: 00080
Expected Value: 0011000000110000001100000011100000110000

1 个答案:

答案 0 :(得分:0)

我认为你的猪版本使用的是Jython2.5.3,它不支持str.format。

尝试类似:

<h:selectOneMenu>
    <c:forEach items="#{bean.items}" var="item">
        <f:selectItem itemValue="#{item.id}"
                      itemLabel="#{item.strName}"
                      p:title="Description : #{item.strDescription}"/>
    </c:forEach>
</h:selectOneMenu>

此外,还有一个新的Pig版本使用Jython 2.7。