Как отправить параметры на карту, уменьшить запрос в riak с помощью клиента python-riak с использованием erlang

Как отправить параметры в:

query.map()

как указано в "http://basho.github.io/riak-python-client/query.html#riak.mapreduce.RiakMapReduce.map".

У меня есть map.erl в erlmap fodler в моей системе. В этом у меня есть функция карты.

Я дал так:

>>> query.map(['/home/intel/gopi/sam_programmes/erl/erlmap/map.erl','Map'],options={'language':'erlang'})

После перехода на команду:

query.run()

Выдает ошибку:

Traceback (most recent call last):

File "<input>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/riak-1.5.2-py2.6.egg/riak/mapreduce.py", line 234, in run
result = t.mapred(self._inputs, query, timeout)
File "/usr/lib/python2.6/site-packages/riak-1.5.2-py2.6.egg/riak/transports/http.py", line 322, in mapred
(repr(response[0]), repr(response[1])))
Exception: Error running MapReduce operation. Headers: {'date': 'Wed, 21 May 2014 07:27:23 GMT', 'content-length': '1391', 'content-type': 'text/html', 'http
_code': 500, 'server': 'MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)'} Body: '<html><head><title>500 Internal Server Error</title></head><body><
h1>Internal Server Error</h1>The server encountered an error while processing this request:<br><pre>{error,{exit,{json_encode,{bad_term,{xform_map,0}}},\n
      [{mochijson2,json_encode,2,\n                          [{file,"src/mochijson2.erl"},{line,149}]},\n              {mochijson2,\'-json_encode_proplis
t/2-fun-0-\',3,\n                          [{file,"src/mochijson2.erl"},{line,167}]},\n              {lists,foldl,3,[{file,"lists.erl"},{line,1197}]},\n
     {mochijson2,json_encode_proplist,2,\n                          [{file,"src/mochijson2.erl"},{line,170}]},\n              {riak_kv_wm_mapred,send_err
or,2,\n                                 [{file,"src/riak_kv_wm_mapred.erl"},\n                                  {line,70}]},\n              {riak_kv_wm_mapre
d,pipe_mapred,2,\n                                 [{file,"src/riak_kv_wm_mapred.erl"},\n                                  {line,173}]},\n      {webm
achine_resource,resource_call,3,\n                                   [{file,"src/webmachine_resource.erl"},\n                                    {line,186}]}
,\n              {webmachine_resource,do,3,\n                                   [{file,"src/webmachine_resource.erl"},\n                                    {
line,142}]}]}}</pre><P><HR><ADDRESS>mochiweb+webmachine web server</ADDRESS></body></html>'

person Krish gopi    schedule 21.05.2014    source источник


Ответы (1)


Функция карты будет выполняться отдельными vnode на различных узлах Riak. То, что вы отправляете в .map(), должно быть строчными именами (атомами) модуля и функции, которые уже скомпилированы и либо загружены, либо доступны в пути кода для каждого узла. Виртуальные узлы, обрабатывающие фазу сопоставления, не будут иметь доступа к нескомпилированному исходному файлу на вашем локальном компьютере.

Когда вы используете клиент Erlang, вы можете определить функцию карты как анонимную забаву и передать объект функции в вызове mapred, но клиент python не может скомпилировать забаву в байт-код, который может запускать vnodes.

person Joe    schedule 21.05.2014
comment
как использовать mochijson в оболочке erlang. ›mochijson:encode(L), тогда я получаю сообщение об ошибке, например ** ошибка исключения: неопределенная функция mochijson2:encode/1 в оболочке erlang - person Krish gopi; 23.05.2014
comment
не могли бы вы уточнить шаги, чтобы заставить вышеперечисленное работать - person Krish gopi; 23.05.2014
comment
теперь я сохранил файлы лучей, а также упомянул в app.config, но все равно получаю ошибку, я передаю как query.map(['maps,'funs']), а затем перехожу к query.run(), но бесполезно получение ошибки. - person Krish gopi; 23.05.2014
comment
я получаю это в своем журнале error.log 2014-05-23 18:20:11.167 [ошибка] ‹0.6769.4› ОТЧЕТ О АВАРИИ Процесс ‹0.6769.4› с 0 соседями завершился по причине: processing_error в строке gen_fsm:terminate/7 611 2014-05-23 18:20:11.167 [ошибка] ‹0.998.0› Супервизор {‹0.998.0›, riak_pipe_vnode_worker_sup} запустил дочерний элемент undefined с {riak_pipe_vnode_worker,start_link,undefined} в ‹0.6769.4› выход с причиной processing_error в контексте child_terminated - person Krish gopi; 23.05.2014
comment
Я начал чат, в котором мы можем обсудить больше места: chat.stackoverflow.com/rooms/54306/ - person Joe; 24.05.2014