我有一個Python UDF,它將十六進制數據轉換爲字符串。當我嘗試在多個字段上調用UDF時,出現錯誤。這是我的Python UDF。腳本是hex_to_str.pyPIG給出錯誤的Python UDF
#!/usr/bin/python
@outputSchema("field:chararray")
def hextoStr(field):
if(field!=""):
return field.decode("hex")
我打電話給我的豬腳本在下面的方式。
register file:/home/myuser/myfolder/hex_to_str.py using jython as convert;
data = LOAD '/user/abc/hexfile' using PigStorage(',') as (Name:chararray, age:chararray);
hex = foreach data generate convert.hextoStr(Name),convert.hextoStr(age);
dump hex;
這是我在運行腳本時遇到的錯誤。
INFO org.apache.pig.scripting.jython.JythonFunction - Schema 'field:chararray' defined for func hextoStr
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1108:
<line 2, column 19> Duplicate schema alias: field
日誌文件錯誤也沒有說太多。
<line 2, column 19> Duplicate schema alias: field
at org.apache.pig.newplan.logical.visitor.SchemaAliasVisitor.validate(SchemaAliasVisitor.java:75)
at org.apache.pig.newplan.logical.visitor.SchemaAliasVisitor.visit(SchemaAliasVisitor.java:105)
at org.apache.pig.newplan.logical.relational.LOGenerate.accept(LOGenerate.java:246)
但是,如果我只在一個字段上運行相同的腳本,那麼它的工作原理。
register file:/home/myuser/myfolder/hex_to_str.py using jython as convert;
data = LOAD '/user/abc/hexfile' using PigStorage(',') as (Name:chararray, age:chararray);
hex = foreach data generate Name,convert.hextoStr(age);
dump hex;
感謝您的回覆。有什麼辦法可以在@outputSchema(「field:chararray」)中將實際的fieldName用於UDF。例如在我的情況下,有什麼辦法可以引用實際字段名稱(名稱或年齡)而不是字段 – DebD
當然,沒問題。Pig中的重新鋸齒基本上完成了你所要求的,我認爲(從最終結果的角度來看)。有關更多詳細信息,請參閱上述答案中的編輯。是否有一個特定的原因,你不想在豬腳本中重新別名? – khampson
沒有具體的原因,但我有一個包含3000多個字段的模式,我使用助手腳本爲此動態生成模式。在這種情況下,我很難生成別名。如果我可以在python UDF中處理它,那麼它變得很簡單。無論如何感謝您的幫助。 – DebD