2017-01-28 4 views
0

Je ne pouvais pas obtenir la fonction Erlang en cours d'exécution afin d'essayer avec JavaScript comme ci-dessous:MapReduce erreur javascript fonction

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 

ne semble pas travailler avec JS ainsi. Shell se bloque et ne revient pas du tout. Veuillez suggérer.

** Mise à jour **

Aujourd'hui, quand je l'ai essayé je vois l'erreur suivante:

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

utilisation Javascript dans la carte de Riak Réduire la capacité a été désapprouvée: http://docs.basho.com/riak/kv/2.2.0/release-notes/. Je recommande fortement de regarder les exemples d'Erlang dans la documentation: http://docs.basho.com/riak/kv/2.2.0/developing/usage/mapreduce/. – Craig

+0

Oui, je sais, mais plus tôt, j'ai posté des problèmes avec les fonctions erlang aussi personne n'a donné une réponse correcte http://stackoverflow.com/questions/40750284/riak-mapreduce-error fondamentalement erlang ne fonctionne tout simplement pas dans mon cas. Il serait utile que vous puissiez répondre à la question erlang. merci – Raghuveer

+0

Désolé, j'aimerais aider, mais je ne suis pas vraiment un expert Erlang. Si vous ne recevez pas de réponses sur Stack à des questions spécifiques, vous pouvez consulter les listes de diffusion Riak: http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com – Craig

Répondre

1

L'élément de requête doit être une liste d'objets, avec « la carte » et « réduire » être en objets discrets. Votre JSON les a comme propriétés du même objet.

Cela a fonctionné pour moi:

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) 
     ]; 
     }" 
    }} 
    ] 
}'