/ / Brak modułu o nazwie simplejson w python UDF na EMR - amazon-web-services, apache-pig, elastic-map-reduce

Brak modułu o nazwie simplejson w python UDF na EMR - amazon-web-services, apache-pig, elastic-map-reduce

Uruchomiłem zadanie Amazon Elastic MapReduce (EMR) przy użyciu Pig. Mam problem z zaimportowaniem modułów json lub simplejson do mojej funkcji zdefiniowanej przez użytkownika Pythona (UDF).

Oto mój kod:

#!/usr/bin/env python
import simplejson as json
@outputSchema("m:map[]")
def flattenJSON(text):
j = json.loads(text)
...

Kiedy próbuję zarejestrować funkcję w Pig, pojawia się komunikat "Brak modułu o nazwie simplejson"

grunt> register "s3://chopperui-emr/code/flattenDict.py" using jython as flatten;
2015-05-31 16:53:43,041 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1121: Python Error. Traceback (most recent call last):
File "/tmp/pig6071834754384533869tmp/flattenDict.py", line 32, in <module>
import simplejson as json
ImportError: No module named simplejson

Jednak mój Amazon AMI zawiera Python 2.6, który zawiera json jako standardowy pakiet (przy użyciu import json też nie działa) .Jeśli spróbuję zainstalować simplejson za pomocą pip, oznacza to, że jest on już zainstalowany (na obu głównych i głównych węzłach).

[hadoop@ip-172-31-46-71 ~]$ pip install simplejson
Requirement already satisfied (use --upgrade to upgrade): simplejson in /usr/local/lib64/python2.6/site-packages

Ponadto działa poprawnie, jeśli uruchomię python interaktywnie z wiersza poleceń na węźle głównym

[hadoop@ip-172-31-46-71 ~]$ python
Python 2.6.9 (unknown, Apr  1 2015, 18:16:00)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>>

Musi być coś innego na temat tego, w jaki sposób EMR lub Pig konfiguruje środowisko Python, ale co?

Odpowiedzi:

1 dla odpowiedzi № 1

Pig UDF używa jython, który nie działa z simplejson.

Możesz spróbować: Jyson jako parser Json