Scala saveAsCassandraTable不是…dstream.dstream[(String,Int,String]的成员

Scala saveAsCassandraTable不是…dstream.dstream[(String,Int,String]的成员,scala,apache-spark,cassandra,Scala,Apache Spark,Cassandra,当我试图使用saveAsCassandraTable将实时推文加载到Cassandra时,出现以下错误 value saveascandratable不是org.apache.spark.streaming.dstream.dstream[(String,Int,String)]的成员。 不过,我能够使用saveToCassandra成功导出。到目前为止,我可以整理的代码如下: val tags = stream.map(_.getText).filter(_.startsWith("@xyz"

当我试图使用saveAsCassandraTable将实时推文加载到Cassandra时,出现以下错误

value saveascandratable不是org.apache.spark.streaming.dstream.dstream[(String,Int,String)]的成员。

不过,我能够使用saveToCassandra成功导出。到目前为止,我可以整理的代码如下:

val tags = stream.map(_.getText).filter(_.startsWith("@xyz"))     
val Counts  =   tags.map((_, 1)).reduceByKeyAndWindow((x: Int, y: Int) => x + y, windowLength, slideInterval)    
val CountsAll   =   Counts.map{case (tag,   counter) => (tag,   counter, "Everything")}    
CountsAll.saveAsCassandraTable("demo1", "tags1")
我的要求是scala将tweets同时加载到Cassandra中的两个不同表中。 一个是Cassandra中的预定义表,另一个是在每次加载推文时动态创建表。tweet以2000秒的间隔加载


感谢您对如何执行
saveascandratable

的任何建议,就像@user6910411所说的,您的错误告诉您试图在
DStream上调用
saveascandratable
。 在您的情况下,只能在一个
RDD[(String,Int,String)]
上使用它

你想要这样的东西:

CountsAll.foreachRDD{ rdd =>
   rdd.saveAsCassandraTable("demo1", "tags1")
}
更新

RDDAPI不支持截断等。 您可能应该在Spark代码路径之外管理模式。 但是,要直接满足您的要求:

val conn: CassandraConnector = CassandraConnector(sparkConf())
conn.withSessionDo { session =>
      session.execute(s"""CREATE TABLE tags1..."")
      }
    }
其中
sparkConf()
返回带有Cassandra设置的spark配置对象。
.withSessionDo
从DataStax C*驱动程序中为您提供一个
会话
对象,以便您可以使用它执行任何操作。
同样,我建议不要直接在Spark代码路径上进行模式管理,而是独立管理。

…谢谢。我尝试了您的上述建议,但它抛出了一个Java异常错误:com.datastax.driver.core.exceptions.alreadyexistException:表demo1.tags1已经存在。在cassandra中,我看到了这个错误-InvalidRequest:error from server:code=2200[Invalid query]message=“unconfigured table tags1”我的要求是在每次发送新tweet时截断或重写选项卡并加载。我认为saveAscandratable将覆盖现有表。