Action:How 中的 Spark Cassandra Connector 如果 Cassandra 托管在不同的服务器上是否有效

Spark Cassandra Connector in Action:How does it work if Cassandra is hosted on a different server

场景:Cassandra 托管在服务器 a.b.c.d 上,spark 在服务器上运行 w.x.y.z

假设我想从 table(比如 table)casssandra 转换数据并将其重写到 cassandra 中的其他 table(比如 tableNew)使用 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代表我做的transformation/filtering。我不确定在这种情况下 Spark cassandra 连接器在内部是如何工作的。 这是我的困惑:

1:spark是从Cassandra source table加载数据到内存然后过滤再加载到Target table还是

2: Spark cassandra 连接器是否将过滤条件转换为 Where 子句并仅加载相关数据以形成 RDD 并将其写回 Cassandra 中的目标 table 或

3:整个操作是否作为一个cql操作发生,其中查询被转换为类似sql的查询并在cassandra本身中执行?(我几乎可以肯定这不是发生的事情)

它是 1. 或 2. 取决于您的 filterCriteria。自然,Spark 本身不能进行任何 CQL 过滤,但自定义数据源可以使用谓词下推来实现它。如果是 Cassandra 驱动程序,它会被实现 here 并且答案取决于它是否涵盖了使用的 filterCriteria.