方案:Cassandra托管在服务器a.b.c.d
上,而spark在服务器w.x.y.z
上运行。
假设我想从一个表(例如表)casssandra中转换数据,并使用Spark将其重写为cassandra中的另一个表(例如tableNew),我编写的代码看起来像这样
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源表中加载数据到内存,然后对其进行过滤并将其重新加载到Target表中,或者
2:Spark cassandra连接器是否将过滤条件转换为Where
子句,并且仅加载相关数据以形成RDD并将其写回到Cassandra Or中的目标表中?
3:整个操作是否像cql操作一样发生,将查询转换为类似sql的查询并在cassandra本身中执行?(我几乎可以确定这不会发生)
答案 0 :(得分:2)
根据您的destinationViewController.
tableView(destinationViewController.tableView,
didSelectRowAt: IndexPath(row: 0, section: 0))
是1还是2。自然,Spark本身不能执行任何CQL筛选,但是自定义数据源可以使用谓词下推来实现它。如果是Cassandra驱动程序,则实现为here,答案取决于是否覆盖了所使用的filterCriteria
。