Сценарий: Cassandra размещается на сервере a.b.c.d
, а Spark работает на сервере, скажем, w.x.y.z
.
Предположим, я хочу преобразовать данные из таблицы (скажем, таблицы) Casssandra и переписать то же самое вдругая таблица (скажем, tableNew) в cassandra с использованием Spark. Код, который я пишу, выглядит примерно так
val conf = new SparkConf(true)
.set("spark.cassandra.connection.host", "a.b.c.d")
.set("spark.cassandra.auth.username", "<UserName>")
.set("spark.cassandra.auth.password", "<Password>")
val spark = SparkSession.builder().master("yarn")
.config(conf)
.getOrCreate()
val dfFromCassandra = spark.read.format("org.apache.spark.sql.cassandra").options(Map( "table" -> "<table>", "keyspace" -> "<Keyspace>")).load()
val filteredDF = dfFromCassandra.filter(filterCriteria).write.format("org.apache.spark.sql.cassandra").options(Map( "table" -> "<tableNew>", "keyspace" -> "<Keyspace>")).save
Здесь filterCriteria
представляет преобразование / фильтрацию, которые я делаю.Я не уверен, как разъем Spark Cassandra работает в этом случае внутренне.Это путаница, которая у меня есть:
1: загружает ли Spark данные из исходной таблицы Cassandra в память, затем фильтрует их и загружает их в целевую таблицу Или
2:Преобразует ли Spark cassandra критерий фильтра в условие Where
и загружает только соответствующие данные для формирования RDD и записывает их обратно в целевую таблицу в Cassandra Или
3: вся операция выполняется как операция cqlгде запрос конвертируется в sqllike-запрос и выполняется в самой cassandra? (я почти уверен, что это не то, что происходит)