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
.
场景: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
.