如何在我的Hadoop Mapper中将String转换为Writable对象

nir*_*ack 0 java apache twitter hadoop hbase

几个小时后,这是一个非常疯狂的问题.

任何帮助将受到高度赞赏.

我无法做到

public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
      if (!value.toString().equals("")) {



          Gson gson = new Gson();
          Boolean flag = true;
          System.out.println("000000000"); 
          while(flag){
              Text tweetId = new Text();
              Tweet tweet = gson.fromJson(value.toString(), Tweet.class);
              tweetId.set(tweet.getRetweetStatus().getUser().getId().toString());
              System.out.println("Tweet objects:" + tweet.toString());
              System.out.println("ParentUserId:" + tweetId);
              context.write(tweetId, tweet);
              flag = false;
          }
          Text tweetId = new Text();
          Tweet tweet = gson.fromJson(value.toString(), Tweet.class);
          tweetId.set(tweet.getUser().getId().toString());
          String tweetReverse = (Object) tweet.getRetweetStatus().getUser().getId();

          System.out.println("Reverse::");
          System.out.println("Tweet objects:" + tweetReverse);
          System.out.println("ParentUserId:" + tweetId);

          context.write(tweetId, tweetReverse);
      }
    }
Run Code Online (Sandbox Code Playgroud)

我想将String对象'tweetReverse'转换为Writable,以便我可以使用context.write函数.

这甚至可能吗?

如果不转换我该怎么办?

如果我将泛型类型更改为String,那么我也会在类中将问题扩展到读写值.

任何帮助将受到高度赞赏.

非常感谢提前.

xpa*_*492 6

我觉得你需要的只是

context.write(tweetId, new Text(tweetReverse));
Run Code Online (Sandbox Code Playgroud)

也就是说,您只需创建一个新的Text对象(实现Writable)并在构造函数中传递一个String.