我实际上是尝试使用apache-spark,twitter API和cassandra来计算一个问题与Twitter上的响应之间的平均时间。
但是当我试图访问CassandraConnector返回的DataSet时,我只得到NullPointerException。
def getTweets(inReplyToStatusId : Long, timestamp : DateTime ): String = {
if(inReplyToStatusId > 0){
CassandraConnector(TwitterStreamingApp.conf).withSessionDo { session =>
val reply_id = session.execute("SELECT created_at FROM twitter_streaming.tweets WHERE tweet_id ="+ inReplyToStatusId+"ALLOW FILTERING")
val reply_time_it = reply_id.all().get(0).getString("created_at")
print(reply_time_it)
}
}
}
关于如何在scala中执行此操作的任何想法?这似乎很容易,但我在这方面苦苦挣扎!
谢谢
答案 0 :(得分:1)
最可疑的行是
val reply_time_it = reply_id.all().get(0).getString("created_at")
由于cassandra记录中可能缺少任何非关键字段,因此很可能有时会null
。你可以将它包装在像
val reply_time_it = Option( reply_id.all().get(0).getString("created_at"))
然后你可以使用像getOrElse
这样的方法来获取默认值,forEach
来执行副作用方法(如果存在值),map
来创建基于此值的新值。
你也应该:
mapPartions
或mapPartitionsWithIndex
PreparedStatement