Scala saveAsCassandraTable不是…dstream.dstream[(String,Int,String]的成员
当我试图使用saveAsCassandraTable将实时推文加载到Cassandra时,出现以下错误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"
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将覆盖现有表。