更新cassandra表中的一列

时间:2016-04-17 14:14:54

标签: scala apache-spark cassandra apache-spark-sql spark-cassandra-connector

我有一个cassandra表person_master(personId:int,     customerId:Int,     firstName:String,     lastName:String,     mrids:Set)primaryKey(personId和customerID)

假设我有一个结构的输入RDD [personId,customerId,firstName,lastname,messageType:String,source:String,sourceType:String]

假设RDD的值:[1001,119,无,无,{abc.xyz} 和cassandra row有价值[1001,119,Vikash,Singh,{aaa.bbb}]

我希望基于RDD值获取cassandra行并更新cassandra表的mrids列并使用cassandra行中的所有其他列。

e.g。在这里我想要最终的RDD值为[1001,119,Vikash,Singh,{aaa.bbb,abc.xyz}],我将在稍后更新到cassandra。

任何人都可以使用cassandra Connector为我提供在Spark中执行此操作的解决方案。

1 个答案:

答案 0 :(得分:0)

假设sc是sparkContext,

val sparkConf = new SparkConf().setMaster(SPARK_MASTER)
                            .setAppName(SPARK_SCALA_APP_NAME)
                            .setJars(SPARK_SCALA_JAR)
sparkConf.set("spark.cassandra.connection.host", value)
sparkConf.set("spark.cassandra.auth.username", value)
sparkConf.set("spark.cassandra.auth.password", value)
val sc = new SparkContext(sparkConf)

您可以使用或忽略where子句(只有在其分区键时才能使用)

val selectedRow = sc.cassandraTable("keyspace", "tableName")
      .select("key", "column2", "column3")
      .where("key IN ?", keys)
      .as((key: String, column2: String, column3: Integer)
          =>(key, column2, column3))

对您的rdd进行过滤和修改 然后将其保存为,

selectedRow.saveToCassandra("keyspace",
                           "tableName",
                           SomeColumns("key", "column2", "column3"))