Sun*_*B M 4 scala cassandra-2.0 apache-spark apache-spark-sql spark-cassandra-connector
我在更新键空间中的表时遇到了scala上的spark cassandra连接器问题
这是我的一段代码
val query = "UPDATE " + COLUMN_FAMILY_UNIQUE_TRAFFIC + DATA_SET_DEVICE +
" SET a= a + " + b + " WHERE x=" +
x + " AND y=" + y +
" AND z=" + x
println(query)
val KeySpace = new CassandraSQLContext(sparkContext)
KeySpace.setKeyspace(KEYSPACE)
hourUniqueKeySpace.sql(query)
Run Code Online (Sandbox Code Playgroud)
当我执行此代码时,我收到这样的错误
Exception in thread "main" java.lang.RuntimeException: [1.1] failure: ``insert'' expected but identifier UPDATE found
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?我怎样才能解决这个问题?
通过spark-cassandra-connector可以更新带有计数器列的表.你将不得不使用DataFrames和DataFrameWriter方法保存与模式"追加"(或SaveMode .Append如果您愿意).检查代码DataFrameWriter.scala.
例如,给出一个表:
cqlsh:test> SELECT * FROM name_counter ;
name | surname | count
---------+---------+-------
John | Smith | 100
Zhang | Wei | 1000
Angelos | Papas | 10
Run Code Online (Sandbox Code Playgroud)
代码应该如下所示:
val updateRdd = sc.parallelize(Seq(Row("John", "Smith", 1L),
Row("Zhang", "Wei", 2L),
Row("Angelos", "Papas", 3L)))
val tblStruct = new StructType(
Array(StructField("name", StringType, nullable = false),
StructField("surname", StringType, nullable = false),
StructField("count", LongType, nullable = false)))
val updateDf = sqlContext.createDataFrame(updateRdd, tblStruct)
updateDf.write.format("org.apache.spark.sql.cassandra")
.options(Map("keyspace" -> "test", "table" -> "name_counter"))
.mode("append")
.save()
Run Code Online (Sandbox Code Playgroud)
更新后:
name | surname | count
---------+---------+-------
John | Smith | 101
Zhang | Wei | 1002
Angelos | Papas | 13
Run Code Online (Sandbox Code Playgroud)
通过将RDD隐式转换为DataFrame:import sqlContext.implicits._并使用,DataFrame转换可以更简单.toDF().
检查此玩具应用程序的完整代码:https: //github.com/kyrsideris/SparkUpdateCassandra/tree/master
由于版本在这里非常重要,以上内容适用于Scala 2.11.7,Spark 1.5.1,spark-cassandra-connector 1.5.0-RC1-s_2.11,Cassandra 3.0.5.DataFrameWriter被指定为@Experimental自@since 1.4.0.
| 归档时间: |
|
| 查看次数: |
6478 次 |
| 最近记录: |