Apache spark 使用spark cassandra连接器,使用spark扫描多个cassandra表格
我有一个问题是如何使用spark操作/迭代/扫描cassandra的多个表。我们的项目使用spark&spark cassandra连接器连接到cassandra来扫描多个表,尝试匹配不同表中的相关值,如果匹配,则执行额外的操作,例如插入表。用例如下所示:Apache spark 使用spark cassandra连接器,使用spark扫描多个cassandra表格,apache-spark,cassandra,spark-cassandra-connector,Apache Spark,Cassandra,Spark Cassandra Connector,我有一个问题是如何使用spark操作/迭代/扫描cassandra的多个表。我们的项目使用spark&spark cassandra连接器连接到cassandra来扫描多个表,尝试匹配不同表中的相关值,如果匹配,则执行额外的操作,例如插入表。用例如下所示: sc.cassandraTable(KEYSPACE, "table1").foreach( row => { val company_url = row.getString("company_url") sc
sc.cassandraTable(KEYSPACE, "table1").foreach(
row => {
val company_url = row.getString("company_url")
sc.cassandraTable(keyspace, "table2").foreach(
val url = row.getString("url")
val value = row.getString("value")
if (company_url == url) {
sc.saveToCassandra(KEYSPACE, "target", SomeColumns(url, value))
}
)
})
问题是
看起来您实际上正在尝试进行一系列内部联接。见 方法 这允许您使用一个RDD的元素对Cassandra表进行直接查询。根据您从Cassandra处读取的数据比例,这可能是您的最佳选择。如果分数太大,最好分别读取这两个表,然后使用RDD.join方法将行对齐
如果所有其他操作都失败,您可以始终手动使用对象直接访问Java驱动程序,并从分布式上下文对其执行原始请求。我无法执行联接,因为在大多数情况下,我必须使用string.contains比较相关列,不仅仅是字符串相等运算符。这需要笛卡尔连接,除非你有像Solr.Thank这样的二级索引。如果我做一个笛卡尔连接,结果会是巨大的,它可能会耗尽内存吗?如何使用二级索引来完成这些工作?