我有一个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中执行此操作的解决方案。
答案 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"))