Spark Cassandra Connector в действии: как он работает, если Cassandra размещена на другом сервере - PullRequest
1 голос
/ 09 июля 2019

Сценарий: 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? (я почти уверен, что это не то, что происходит)

1 Ответ

2 голосов
/ 09 июля 2019

Это либо 1., либо 2. в зависимости от вашего filterCriteria. Естественно, Spark сам по себе не может выполнять фильтрацию CQL, но пользовательские источники данных могут реализовать его с помощью предиката pushdown. В случае, если драйвер Cassandra, он реализован здесь , и ответ зависит, если он охватывает используемые filterCriteria.

...