Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ApacheAvro序列化JSON文档,然后将其写入Cassandra?_Java_Json_Cassandra_Jackson_Avro - Fatal编程技术网

Java 如何使用ApacheAvro序列化JSON文档,然后将其写入Cassandra?

Java 如何使用ApacheAvro序列化JSON文档,然后将其写入Cassandra?,java,json,cassandra,jackson,avro,Java,Json,Cassandra,Jackson,Avro,最近我读了很多关于ApacheAvro的文章,我更倾向于使用它而不是使用JSON。目前,我们正在做的是,我们使用Jackson序列化JSON文档,然后为每个行键/用户id将该序列化JSON文档写入Cassandra。然后我们有一个REST服务,它使用row键读取整个JSON文档,然后反序列化并进一步使用它 我们将这样写进卡桑德拉- user-id column-name serialize-json-document-value 下面是一个示例,它显示了我们正在编写到Cassandra

最近我读了很多关于ApacheAvro的文章,我更倾向于使用它而不是使用JSON。目前,我们正在做的是,我们使用
Jackson
序列化
JSON
文档,然后为每个
行键/用户id
将该序列化
JSON
文档写入
Cassandra
。然后我们有一个REST服务,它使用row键读取整个
JSON
文档,然后反序列化并进一步使用它

我们将这样写进卡桑德拉-

user-id   column-name   serialize-json-document-value
下面是一个示例,它显示了我们正在编写到Cassandra中的JSON文档。此JSON文档用于特定的行键/用户id

{
  "lv" : [ {
    "v" : {
      "site-id" : 0,
      "categories" : {
        "321" : {
          "price_score" : "0.2",
          "confidence_score" : "0.5"
        },
        "123" : {
          "price_score" : "0.4",
          "confidence_score" : "0.2"
        }
      },
      "price-score" : 0.5,
      "confidence-score" : 0.2
    }
  } ],
  "lmd" : 1379214255197
}
现在我们考虑使用ApacheAvro,这样我们就可以通过使用ApacheAvro序列化来压缩这个JSON文档,然后将其存储在Cassandra中。我有几个问题要问-

  • 是否可以首先使用ApacheAvro序列化上述JSON文档,然后将其写入Cassandra?如果是,我怎么做?有人能举个简单的例子吗
  • 同时,我们还需要对其进行反序列化,同时从我们的REST服务中读取Cassandra的信息。这也可以吗
  • 下面是我的简单代码,它序列化JSON文档并在控制台上打印出来

    public static void main(String[] args) {
    
        final long lmd = System.currentTimeMillis();
    
        Map<String, Object> props = new HashMap<String, Object>();
        props.put("site-id", 0);
        props.put("price-score", 0.5);
        props.put("confidence-score", 0.2);
    
        Map<String, Category> categories = new HashMap<String, Category>();
        categories.put("123", new Category("0.4", "0.2"));
        categories.put("321", new Category("0.2", "0.5"));
        props.put("categories", categories);
    
        AttributeValue av = new AttributeValue();
        av.setProperties(props);
    
        Attribute attr = new Attribute();
        attr.instantiateNewListValue();
        attr.getListValue().add(av);
        attr.setLastModifiedDate(lmd);
    
        // serialize it
        try {
            String jsonStr = JsonMapperFactory.get().writeValueAsString(attr);
    
            // then write into Cassandra
            System.out.println(jsonStr);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    AttributeValue
    Attribute
    类正在使用
    Jackson注释

    还有一个重要的注意事项,上述json文档中的属性将根据列名进行更改。对于不同的列名,我们有不同的属性。有些列名将有两个属性,有些列名将有5个属性。因此,根据我们现有的元数据,上述JSON文档将具有正确的属性和值。


    我希望这个问题足够清楚。有人能提供一个简单的例子吗?我如何使用ApacheAvro实现这一点。我刚开始使用ApacheAvro,所以我遇到了很多问题。

    Avro需要一个模式,所以在使用它之前必须设计它;而且用法与自由格式的JSON有很大不同

    但不是AVRO,您可能需要考虑JSON的一对一二进制序列化,它是为您希望在JSON和二进制数据之间来回移动的用例而设计的;例如,使用JSON进行调试或为Javascript客户端提供服务

    Jackson有微笑后端(请参阅),使用微笑而不是JSON(或除JSON之外)是一个简单的改变。
    很多项目都使用它(比如弹性搜索),它是成熟稳定的格式;通过Jackson提供的工具支持对于不同的数据类型非常广泛。

    既然您已经使用了Jackson,您可以尝试使用

    我有同样的问题。你解决了吗?怎么解决?谢谢
    {"lv":[{"v":{"site-id":0,"categories":{"321":{"price_score":"0.2","confidence_score":"0.5"},"123":{"price_score":"0.4","confidence_score":"0.2"}},"price-score":0.5,"confidence-score":0.2}}],"lmd":1379214255197}