如何解决如何在 Spark 和 Cassandra 中将数据从小表映射到大表? 第一个表的主键是第二个表的分区键
这是我的表 1:
case class Table1(
key1: String // (primary key),value1: String
)
表 2:
case class Table2(
key1: String // (partition key)
key2: String // (primary key)
value1: String
)
我需要将表 1 中的 value1 复制到表 2 中分区的所有行(匹配表 1 中的 key1)。
我的代码:
val table2 = table1.map(
s => {
.... // Here code
}
)
table2.savetoCassandra("keyspaceName","table2",SomeColumns("
解决方法
在表之间进行连接,然后将数据写回,例如:
import spark.implicits._
import org.apache.spark.sql.cassandra._
val df1 = spark.read.cassandraFormat("table1","ks").load
val df2 = spark.read.cassandraFormat("table2","ks").load.select("key1","key2")
val joined = df2.join(df1,df1("key1") === df2("key2"))
.select(df2("key1"),df2("key2"),df1("value1"))
joined.write.cassandraFormat("table2","ks").save
为了使此过程高效,您需要使用自 Spark Cassandra Connector 2.5.0 以来可用的所谓直接连接(如果您有以前的版本,那么您将需要转到 RDD API 并使用函数 {{1 }}).
直接加入在进程开始时启用(.joinWithCassandraTable
或 spark-shell
),如下所示:
spark-submit
附言您可以在 following blog post 中阅读有关加入 Cassandra 的更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。