我试图检索一个用户的追随者列表,以便以后我可以在一些螺栓中使用该列表,但无论我做什么,我总是得到以下错误:
16374 [Thread-32-twitterSpout] ERROR backtype.storm.util - Async loop died!
java.lang.NullPointerException: null
at storm.spout.twitterSpout.nextTuple(twitterSpout.java:136) ~[classes/:na]
at backtype.storm.daemon.executor$fn__5573$fn__5588$fn__5617.invoke(executor.clj:563) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at backtype.storm.util$async_loop$fn__457.invoke(util.clj:431) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at clojure.lang.AFn.run(AFn.java:24) [clojure-1.5.1.jar:na]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_45]
16375 [Thread-32-twitterSpout] ERROR backtype.storm.daemon.executor -
java.lang.NullPointerException: null
at storm.spout.twitterSpout.nextTuple(twitterSpout.java:136) ~[classes/:na]
at backtype.storm.daemon.executor$fn__5573$fn__5588$fn__5617.invoke(executor.clj:563) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at backtype.storm.util$async_loop$fn__457.invoke(util.clj:431) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at clojure.lang.AFn.run(AFn.java:24) [clojure-1.5.1.jar:na]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_45]
16376 [Thread-34-twitterSpout] ERROR backtype.storm.util - Async loop died!
java.lang.NullPointerException: null
at storm.spout.twitterSpout.nextTuple(twitterSpout.java:136) ~[classes/:na]
at backtype.storm.daemon.executor$fn__5573$fn__5588$fn__5617.invoke(executor.clj:563) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at backtype.storm.util$async_loop$fn__457.invoke(util.clj:431) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at clojure.lang.AFn.run(AFn.java:24) [clojure-1.5.1.jar:na]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_45]
16376 [Thread-34-twitterSpout] ERROR backtype.storm.daemon.executor -
java.lang.NullPointerException: null
at storm.spout.twitterSpout.nextTuple(twitterSpout.java:136) ~[classes/:na]
at backtype.storm.daemon.executor$fn__5573$fn__5588$fn__5617.invoke(executor.clj:563) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at backtype.storm.util$async_loop$fn__457.invoke(util.clj:431) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
at clojure.lang.AFn.run(AFn.java:24) [clojure-1.5.1.jar:na]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_45]
下面是我在上次尝试使用declareoutputfields、open和nexttuple函数时使用的代码:
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer){
declarer.declare(new Fields("status","followers"));
}
@Override
public void open(Map map,TopologyContext context,SpoutOutputCollector collector){
queue=new LinkedBlockingQueue<Status>(10000);
this.collector=collector;
ConfigurationBuilder builder=new ConfigurationBuilder();
Configuration configuration=builder.setOAuthAccessToken(accessToken).setOAuthAccessTokenSecret(accessTokenSecret).setOAuthConsumerKey(consumerKey).setOAuthConsumerSecret(consumerSecret).build();
StatusListener listener=new StatusListener() {
@Override
public void onStatus(Status status) {
queue.offer(status);
}
@Override
public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
}
@Override
public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
}
@Override
public void onScrubGeo(long userId, long upToStatusId) {
}
@Override
public void onStallWarning(StallWarning warning) {
}
@Override
public void onException(Exception ex) {
ex.printStackTrace();
}
};
twitterStream=new TwitterStreamFactory(configuration).getInstance();
twitterStream.addListener(listener);
Twitter twitter=new TwitterFactory(configuration).getInstance();
if(filterQuery!=null){
twitterStream.filter(filterQuery);
}else{
twitterStream.sample();
}
}
@Override
public void nextTuple() {
Status ret=queue.poll();
long userID=ret.getUser().getId();
IDs followersIDs;
if(ret==null){
backtype.storm.utils.Utils.sleep(10000);
}else{
try{
followersIDs=twitter.getFollowersIDs(userID);
collector.emit(new Values(ret,followersIDs));
}catch (TwitterException tex){
tex.printStackTrace();
}
}
}
1条答案
按热度按时间sshcrbum1#
我想你的问题是
如果
ret
是null
? 你将得到npe,而试图获得用户你检查空值,但为时已晚。。。。我建议:
检查是否
ret
是null
就在比赛结束后poll
添加ret
跟踪poll
所以它会帮助你调试