在本教程中,您将学习如何设置用于读取和写入数据至Cassandra的一个非常简单的spark应用程序。在开始前,你需要拥有spark和cassandra的基本知识,详情请参阅spark和cassandra官网。
1.创建以下简单的keyspace和table,并在cqlsh执行:
CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 };
CREATE TABLE test.kv(key text PRIMARY KEY, value int);
2.插入测试数据:
INSERT INTO test.kv(key, value) VALUES ('key1', 1);
INSERT INTO test.kv(key, value) VALUES ('key2', 2);
现在,你可以编写使用Cassandra的第一个spark项目。
创建SparkContext之前,将spark.cassandra.connection.host属性设置为Cassandra的节点之一的地址:
#scala
val conf = new SparkConf(true)
.set("spark.cassandra.connection.host", "127.0.0.1")
创建SparkContext。替换127.0.0.1你的Spark-master的实际地址(或使用“local”,以本地模式运行):
val sc = new SparkContext("spark://127.0.0.1:7077", "test", conf)
导入针对SparkContext 和 RDD的 Cassandra专用功能:
import com.datastax.spark.connector._
使用sc.cassandraTable方法来查看该表并返回Spark-RDD:
val rdd = sc.cassandraTable("test", "kv")
println(rdd.count)
println(rdd.first)
println(rdd.map(_.getInt("value")).sum)
**输出结果**
scala> import com.datastax.spark.connector._
import com.datastax.spark.connector._
scala> val rdd = sc.cassandraTable("test", "kv")
rdd: com.datastax.spark.connector.rdd.CassandraTableScanRDD[com.datastax.spark.connector.CassandraRow] = CassandraTableScanRDD[0] at RDD at CassandraRDD.scala:15
scala> println(rdd.count)
2
scala> println(rdd.first)
CassandraRow{key: key1, value: 1}
scala> println(rdd.map(_.getInt("value")).sum)
3.0
为表添加两行数据:
val collection = sc.parallelize(Seq(("key3", 3), ("key4", 4)))
collection.saveToCassandra("test", "kv", SomeColumns("key", "value"))
**查看结果**
scala> rdd.collect()
res8: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{key: key1, value: 1}, CassandraRow{key: key4, value: 4}, CassandraRow{key: key3, value: 3}, CassandraRow{key: key2, value: 2})
本节介绍如何星火连接到cassandra以及如何从spark应用执行CQL语句。
SparkContext
连接cassandra工作为了你的spark应用程序可以连接到cassandra,请在SparkConf对象配置连接选项。这些以spark为前缀的选项,以便它们可以从spark-shell被识别和$ SPARK_HOME/ CONF /sparkdefault.conf内设定。
详细配置官方解释请查看本博客文章《spark连接cassandra配置说明》
示例:
val conf = new SparkConf(true)
.set("spark.cassandra.connection.host", "192.168.123.10")
.set("spark.cassandra.auth.username", "cassandra")
.set("spark.cassandra.auth.password", "cassandra")
val sc = new SparkContext("spark://192.168.123.10:7077", "test", conf)
导入spark-connetct-cassandra驱动:
import com.datastax.spark.connector._