当前位置: 首页 > 面试题库 >

在RIAK上获取MapReduce结果(使用Java客户端)

尚宏硕
2023-03-14
问题内容

我在RIAK上存储Person POJO(4个字符串字段-id,name,lastUpdate,Data),然后尝试使用MapReduce提取这些对象。

我正在做的非常类似于Basho文档:

    BucketMapReduce m = riakClient.mapReduce("person");
    m.addMapPhase(new NamedJSFunction("Riak.mapByFields"), true);
    MapReduceResult result = m.execute();
    Collection<Person> tmp = result.getResult(Person.class);

Person的String构造函数被调用:

public Person(String str){}

(我必须具有此构造函数,否则会因缺少异常而得到异常)。在那里,我将对象作为字符串获得-一个字符串中的对象字段具有一个奇怪的定界符。

为什么我没有将对象自动转换为POJO?我真的需要遍历字符串并反序列化吗?我做错什么了吗?


问题答案:

您正在使用的JS函数无法执行您认为的工作:)它基于具有特定值的字段选择对象,您必须提供该特定值作为阶段的参数。

我认为您正在寻找的是mapValuesJson可以做您想做的事。

另外,您的POJO中根本不需要构造函数。

下面的代码应该为您指明正确的方向(显然,这非常简单,POJO中的所有公共字段都没有注释):

public class App {

    public static void main( String[] args ) throws IOException, RiakException
    {
        IRiakClient client = RiakFactory.httpClient();
        Bucket b = client.fetchBucket("test_mr").execute();

        b.store("myobject", new Person()).execute();
        IRiakObject o = b.fetch("myobject").execute();
        System.out.println(o.getValueAsString());


        BucketMapReduce m = client.mapReduce("test_mr");
        m.addMapPhase(new NamedJSFunction("Riak.mapValuesJson"), true);
        MapReduceResult result = m.execute();
        System.out.println(result.getResultRaw());
        Collection<Person> tmp = result.getResult(Person.class);

        for (Person p : tmp)
        {
            System.out.println(p.data);
        }


        client.shutdown();
    }
}

class Person 
{
    public String id = "12345";
    public String name = "my name";
    public String lastUpdate = "some time";
    public String data = "some data";


}


 类似资料:
  • 我将上面的fetchXml与新的客户端api引用一起使用,如下所示: 我阅读的文档(https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/reference/xrm-webapi/retrievemultipleRecords)指出,第二个参数是options,如果是fetchXml

  • 如果使用的两个数字和运算符存储在变量中(用户输入),如何返回计算结果。 我正在创建一个简单的计算器,并试图输出“Number”“Operator”“Number2”的答案,根据用户输入的内容,答案可以是任何内容。 当输入这些数字和运算符时,输出返回“5 5=5 5”,我试图返回“5 5=10”。

  • 我有一个Java服务器应用程序,它通过TLS从GRPC客户端获取数据并在服务器上处理。现在我想使用多个客户端。要向客户端分配接收到的事件,我想读取客户端证书并使用证书的DN分配事件。如何获取客户端证书? 我发现这个构建服务器:https://github.com/grpc/grpc-java/blob/master/SECURITY.md#mutual-tls 然后你应该实现一个服务器拦截器 }

  • 问题内容: 有没有办法在Node.js上找到客户端的mac地址?我一直在搜索它,但是我发现了node- sigar项目,但是它没有用,因为它引发了“找不到模块./build/Release/sigar”错误。 问题答案: 除非您的代码与客户端在同一LAN段上运行,否则您将无法获取客户端的MAC地址。您可能需要使用命令行工具或本机支持才能获得本地LAN网段上的地址。 对于nodejs:https :

  • 问题内容: 我正在尝试使用PDO从表中检索数据,只是我似乎无法向浏览器输出任何内容,只是得到了一个纯白页。 问题答案: 例。 这是您的dbc类 您的PHP页面:

  • 问题内容: 您好,当没有匹配的学生时,我正在尝试犯一个错误…它将以这种方式显示, 并且我希望列名保持不变,但仍无法弄清楚…可以有人告诉我这是否是对?? 这是我的函数…并且在其中添加错误的地方添加了注释…但是我不知道如何获取列名 我这样尝试,但仍然给了我NULL!该代码在以下 问题答案: ResultSetMetaData metaData = resultSet.getMetaData(); in