2017-01-28 4 views
0

я не смог получить функцию Erlang работает так пытается с JavaScript, как показано ниже:MapReduce Javascript функция ошибки

curl -XPOST http://localhost:8098/mapred \ 
    -H "Content-Type: application/json" \ 
    -d @- \ 
<<EOF 
{ 
    "inputs":"logs", 
    "query":[{ 
    "map":{ 
     "language":"javascript", 
     "source":"function(riakObject, keydata, arg) { 
     var m = riakObject.values[0].data.match(/^INFO.*cart/); 
     return [(m ? m.length : 0)]; 
     }" 
    }, 
    "reduce":{ 
     "language":"javascript", 
     "source":"function(values, arg){ 
     return [values.reduce(
      function(total, v){ return total + v; }, 0) 
     ]; 
     }" 
    } 
    }] 
} 
EOF 

, похоже, не работает с JS, а также. Shell просто висит и не возвращается вообще. Пожалуйста, предложите.

** UPDATE **

Сегодня, когда я пытался я вижу следующее сообщение об ошибке:

An error occurred parsing the "query" field. 
["Unrecognized format of query phase:\n ", 
[123, 
    [34,<<"map">>,34], 
    58, 
    [123, 
    [34,<<"language">>,34], 
    58, 
    [34,<<"javascript">>,34], 
    44, 
    [34,<<"source">>,34], 
    58, 
    [34, 
    <<"function(riakObject, keydata, arg) {  var m = riakObject.values[0].data.match(/^INFO.*Milk/);  return [(m ? m.length : 0)];  }">>, 
    34], 
    125], 
    44, 
    [34,<<"reduce">>,34], 
    58, 
    [123, 
    [34,<<"language">>,34], 
    58, 
    [34,<<"javascript">>,34], 
    44, 
    [34,<<"source">>,34], 
    58, 
    [34, 
    <<"function(values, arg){  return [values.reduce(   function(total, v){ return total + v; }, 0)  ];  }">>, 
    34], 
    125], 
    125], 
"\n\nValid formats are:\n {\"map\":{...spec...}}\n {\"reduce\":{...spec...}}\n {\"link:{...spec}}\n"] 
+0

использование Javascript в карте Riak уменьшит возможность устарела: http://docs.basho.com/riak/kv/2.2.0/release-notes/. Я настоятельно рекомендую посмотреть примеры Erlang в документации: http://docs.basho.com/riak/kv/2.2.0/developing/usage/mapreduce/. – Craig

+0

Да, я знаю, но ранее я разместил вопросы с функциями erlang, и никто не дал правильного ответа. Http://stackoverflow.com/questions/40750284/riak-mapreduce-error в основном erlang просто не работает в моем случае. Было бы полезно, если бы вы ответили на вопрос erlang. спасибо – Raghuveer

+0

Извините, хотел бы помочь, но я не эксперт Erlang. Если вы не получите ответы на Stack на конкретные вопросы, вы можете проверить списки рассылки Riak: http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com – Craig

ответ

1

Элемент запроса должен быть список объектов, с «карта» и «уменьшить», находясь в сдержанные объекты. Ваш JSON имеет их как свойства одного и того же объекта.

Это работает для меня:

curl -XPOST http://localhost:8098/mapred -H "Content-Type: application/json" -d '{ 
    "inputs":"logs", 
    "query":[ 
    {"map":{ 
     "language":"javascript", 
     "source":"function(riakObject, keydata, arg) { 
     var m = riakObject.values[0].data.match(/^INFO.*cart/); 
     return [(m ? m.length : 0)]; 
     }" 
    }}, 
    {"reduce":{ 
     "language":"javascript", 
     "source":"function(values, arg){ 
     return [values.reduce(
      function(total, v){ return total + v; }, 0) 
     ]; 
     }" 
    }} 
    ] 
}'