Twitter Value registerAsTable不是org.apache.spark.rdd.rdd[Tweet]的成员

Twitter Value registerAsTable不是org.apache.spark.rdd.rdd[Tweet]的成员,twitter,apache-zeppelin,twitter-rest-api,Twitter,Apache Zeppelin,Twitter Rest Api,我正在尝试使用齐柏林飞艇中的RESTAPI提取twitter数据。尝试了两个选项RegisterTable和RegisterEmptable,两种方法都不起作用。请帮我解决这个错误。执行齐柏林飞艇教程代码时出现以下错误: 错误:value registerAsTable不是org.apache.spark.rdd.rdd[Tweet]).foreachRDD(rdd=>rdd.registerAsTable(“tweets”)的成员 RDD不能注册为表,而dataframe可以。您可以将RDD转

我正在尝试使用齐柏林飞艇中的RESTAPI提取twitter数据。尝试了两个选项
RegisterTable
RegisterEmptable
,两种方法都不起作用。请帮我解决这个错误。执行齐柏林飞艇教程代码时出现以下错误:

错误:value registerAsTable不是org.apache.spark.rdd.rdd[Tweet]).foreachRDD(rdd=>rdd.registerAsTable(“tweets”)的成员


RDD不能注册为表,而dataframe可以。您可以将RDD转换为dataframe,然后将生成的dataframe作为表或表写入

您可以将RDD转换为数据帧,如下所示

val sqlContext = new SQLContext(sc) 
import sqlContext.implicits._
rdd.toDF()

请参阅zepplin解释器中的并添加org.apache.bahir:spark-streaming-twitter_2.11:2.0.0的外部依赖项,然后使用spark-2.0.1运行

import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.{ SparkConf, SparkContext}
import org.apache.spark.storage.StorageLevel
import scala.io.Source
//import org.apache.spark.Logging
import java.io.File
import org.apache.log4j.Logger
import org.apache.log4j.Level
import sys.process.stringSeqToProcess

import scala.collection.mutable.HashMap
/** Configures the Oauth Credentials for accessing Twitter */
def configureTwitterCredentials(apiKey: String, apiSecret: String, accessToken: String, accessTokenSecret: String) {
  val configs = new HashMap[String, String] ++= Seq(
    "apiKey" -> apiKey, "apiSecret" -> apiSecret, "accessToken" -> accessToken, "accessTokenSecret" -> accessTokenSecret)
  println("Configuring Twitter OAuth")
  configs.foreach{ case(key, value) =>
    if (value.trim.isEmpty) {
      throw new Exception("Error setting authentication - value for " + key + " not set")
    }
    val fullKey = "twitter4j.oauth." + key.replace("api", "consumer")
    System.setProperty(fullKey, value.trim)
    println("\tProperty " + fullKey + " set as [" + value.trim + "]")
  }
  println()
}


// Configure Twitter credentials , following config values will not work,it is for show off
val apiKey = "7AVLnhssAqumpgY6JtMa59w6Tr"
val apiSecret = "kRLstZgz0BYazK6nqfMkPvtJas7LEqF6IlCp9YB1m3pIvvxrRZl"
val accessToken = "79438845v6038203392-CH8jDX7iUSj9xmQRLpHqLzgvlLHLSdQ"
val accessTokenSecret = "OXUpYu5YZrlHnjSacnGJMFkgiZgi4KwZsMzTwA0ALui365"
configureTwitterCredentials(apiKey, apiSecret, accessToken, accessTokenSecret)

import org.apache.spark.{ SparkConf, SparkContext}
import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
import org.apache.spark.SparkContext._

val ssc = new StreamingContext(sc, Seconds(2))

val tweets = TwitterUtils.createStream(ssc, None)
val twt = tweets.window(Seconds(10))

//twt.print


val sqlContext= new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._

case class Tweet(createdAt:Long, text:String)

val tweet = twt.map(status=>
  Tweet(status.getCreatedAt().getTime()/1000, status.getText())
)


tweet.foreachRDD(rdd=>rdd.toDF.registerTempTable("tweets"))
ssc.start()
//ssc.stop()
然后在另一个zappelin单元格的表中运行一些查询

%sql select createdAt, text  from tweets   limit 50
//将RDD转换为DF

val inputs= data.toDF();
inputs.createOrReplaceTempView("tweets");

感谢您提供这段代码片段,它可能会提供一些即时帮助。正确的解释通过说明这是一个很好的问题解决方案的原因而具有教育价值,并将使它对将来有类似但不完全相同问题的读者更有用。请您的回答添加解释,并指出它的局限性假设适用。
val inputs= data.toDF();
inputs.createOrReplaceTempView("tweets");