Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 如何在Storm scheme类中解析来自kafka主题的json数据?_Java_Apache Kafka_Apache Storm_Kafka Consumer Api_Kafka Producer Api - Fatal编程技术网

Java 如何在Storm scheme类中解析来自kafka主题的json数据?

Java 如何在Storm scheme类中解析来自kafka主题的json数据?,java,apache-kafka,apache-storm,kafka-consumer-api,kafka-producer-api,Java,Apache Kafka,Apache Storm,Kafka Consumer Api,Kafka Producer Api,我从卡夫卡主题中获取json数据。 在使用反序列化方法的storm scheme类中,我如何应用json解析来获取所有对象的所有字段,然后我将值返回到新的返回值()。(backtype.storm.tuple.values类方法)?也就是说,如果我的主题中有2个json对象,我将循环它们以获取所有字段,最后,我必须将所有值返回给return方法。我的返回应该包含两个json对象的所有字段 我的问题是: 在return方法中只返回2 obj json数据。 我认为第二个对象的所有字段都覆盖了第一个

我从卡夫卡主题中获取json数据。 在使用反序列化方法的storm scheme类中,我如何应用json解析来获取所有对象的所有字段,然后我将值返回到新的返回值()。(backtype.storm.tuple.values类方法)?也就是说,如果我的主题中有2个json对象,我将循环它们以获取所有字段,最后,我必须将所有值返回给return方法。我的返回应该包含两个json对象的所有字段

我的问题是: 在return方法中只返回2 obj json数据。 我认为第二个对象的所有字段都覆盖了第一个对象字段。最后返回第二个对象字段

你们中有谁能给我一个返回所有对象字段(1,2个对象字段)的主意吗

提前谢谢

public class MainParserSpout implements Scheme{
  String tweet_created_at;
  String tweet_id;
  String tweet_id_str;
  String tweet_text;
  String tweet_source;`    
@Override

try{

public List<Object> deserialize(byte[] bytes){
  String twitterEvent = new String(bytes, "UTF-8");
   JSONArray JSON = new JSONArray(twitterEvent);
      for(int i=0;i<JSON.length();i++) {
        JSONObject object_tweet=JSON.getJSONObject(i);
//Tweet status                  
          try{
            this.tweet_created_at=object_tweet.getString("created_at");
            this.tweet_id=object_tweet.getString("id");
            this.tweet_id_str=object_tweet.getString("id_str");
            this.tweet_text=object_tweet.getString("text");
            this.tweet_source=object_tweet.getString("source");
          }catch(Exception e){}
    } //array for close
}catch(Exception e){}
} //JSON array close
  return new Values(tweet_created_at,tweet_id,tweet_id_str,tweet_text,tweet_source);
} //deserialize method close
public Fields getOutputFields() {
    return newFields("tweet_created_at","tweet_id","tweet_id_str","tweet_text","tweet_source");
} //getOutputFields method close
} //class close
public类MainParserSpout实现方案{
在上创建的字符串tweet;
字符串tweet_id;
字符串tweet_id_str;
字符串tweet_文本;
字符串tweet_source;`
@凌驾
试一试{
公共列表反序列化(字节[]字节){
String twitterEvent=新字符串(字节,“UTF-8”);
JSONArray JSON=新的JSONArray(twitterEvent);

对于(int i=0;i您不能在一次调用
反序列化
中获得多个元组。但是,您可以通过将元组“加倍”来发出两条tweet,即每个值/字段/属性有两次。之后,您可以使用一个螺栓,它接受一个“加倍tweet”,拆分此元组并发出两个单一tweet元组

类似于(我不熟悉JSON Tweet格式,因此这更像是关于问题代码示例的猜测):

@覆盖
公共列表反序列化(字节[]字节){
List doubleTweet=new ArrayList();
试一试{
String twitterEvent=新字符串(字节,“UTF-8”);
JSONArray JSON=新的JSONArray(twitterEvent);

对于(int i=0;i我忽略了kafka是消息发布-订阅消息传递系统这一点。
当我试图将数据发送给producer时,我将a Json chuck 20个对象作为单个消息发送,但我的方案仅适用于单个Json chuck。因此,我将单个20个对象Json chuck划分为20个Json chuck,并将每个chuck发送给Json producer。

我不确定您想做什么……您能给出一个显示两个Json chuck的小示例吗对象和预期的输出元组你想得到吗?我添加了代码示例。如果我的tweet对象只包含两个tweet第二个tweet字段,即:tweet_created_at,id.text,则第二个tweet的源代码将最终返回。请分享如何返回每个迭代@Matthias J的值。你的代码示例似乎不完整……此外,
反序列化
必须返回一个元组。因此,JSON中的所有数据都必须收集到一个返回值中。你不能从一条推文中返回多个元组。是的!我们不能尝试获取多个元组。我想知道获取多个元组值的方法,可以在storm包中命名任何其他类来帮助我解决这个问题。我正在阅读来自kafak主题的数据。因此我使用了反序列化方法。@Matthias J.Sax不确定“多元组值”是什么意思——一个元组有多个值……使用
反序列化
是正确的方法;但是,你不能在一次调用中获得多个元组。但是,你可以通过“加倍”发出两条推文你的元组,即每个值/字段/属性有两次。之后,你可以使用一个螺栓,它接受一个“双tweet”,拆分这个元组并发出两个单tweet元组。你能给我一个“双tweet”和“RawScheme”的代码示例吗?@Matthias J.SaxDouble我需要返回列表对象“双tweet”来返回newFields()?在问题中做了一个小的更正。当我将列表对象返回给新的feilds()时,请仔细阅读@Matthias J.saxon;我得到的错误如下:java.lang.IllegalArgumentException:创建的元组的字段数不正确。应为1个字段,但有5个字段。@Matthias J.SaxI本人从未使用Kafka和Schema。不确定,为什么它应为一个字段而不是五个字段。您能将Stacktrace添加到问题中吗?以及汇编的代码拓扑结构是什么?