向python脚本添加jar文件

kcugc4gi  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(361)

我正在尝试使用jar文件并将其功能导入到python脚本中。jar文件与python脚本和pig脚本位于同一目录中
脚本.py

  1. import sys
  2. sys.path.append('/home/hadoop/scripts/jyson-1.0.2.jar')
  3. from com.xhaus.jyson import JysonCodec as json
  4. @outputSchema('output_field_name:chararray')
  5. def get_team(arg0):
  6. return json.loads(arg0)

脚本.pig

  1. register 'script.py' using jython as script_udf;
  2. a = LOAD 'data.json' USING PigStorage('*') as (line:chararray);
  3. teams = FOREACH a GENERATE script_udf.get_team(line);
  4. dump teams;

这是一个非常简单的自定义项,我试图使用,但由于某种原因,我总是得到一个错误,说“没有模块命名xhaus”。下面是那个jar里的所有类。

  1. $ jar tf jyson-1.0.2.jar
  2. META-INF/
  3. META-INF/MANIFEST.MF
  4. com/
  5. com/xhaus/
  6. com/xhaus/jyson/
  7. com/xhaus/jyson/JSONDecodeError.class
  8. com/xhaus/jyson/JSONEncodeError.class
  9. com/xhaus/jyson/JSONError.class
  10. com/xhaus/jyson/JysonCodec.class
  11. com/xhaus/jyson/JysonDecoder.class
  12. com/xhaus/jyson/JysonEncoder.class

所以xhaus存在于jar中,但由于某些原因,它没有被提取。当我看一些教程时,他们能够很好地运行这些脚本。我可能遗漏了一个愚蠢的细节,请帮忙。
编辑:
这个脚本是由pig执行的。所以pig脚本调用python脚本。python脚本使用jysoncodec类。

  1. pig script.pig
gajydyqb

gajydyqb1#

如果您在pig map reduce模式下运行这个脚本,您需要在作业运行时使jar可用。在pig脚本的顶部,您需要添加以下行

  1. REGISTER /home/hadoop/scripts/jyson-1.0.2.jar;

那你就得发表评论了 sys.path.append('/home/hadoop/scripts/jyson-1.0.2.jar') 从你的自定义项脚本。jar中的类已经可以用于udf,因为您已经用pig脚本注册了这些类。所以我需要改变 sys.path 希望有帮助。

相关问题