Spark Cassandra 连接器 3.0.0 - 如何启用 DirectJoin - Java

问题描述

我有 cassandra 3.11.9、spark 3.0.1 和 spark-cassandra-connector 3.0.0(依赖项)。我正在尝试使用 SCC 3.0.0 的直接连接,但似乎当我在下面的数据集上使用连接时,我得到了 spark 的广播哈希连接。

Dataset<Row> metlistinitial = sp.read().format("org.apache.spark.sql.cassandra")
            .options(new HashMap<String,String>() {
                {
                    put("keyspace","mdb");
                    put("table","experiment");
                }
            })
            .load().select(col("experimentid"),col("description"))
            .join(dfexplist,"experimentid")
            .filter(col("description").notEqual("Unidentified"));
metlistinitial.explain();

== Physical Plan ==
*(1) Project [experimentid#6,description#7]
+- *(1) broadcastHashJoin [experimentid#6],[experimentid#4],Inner,buildright
   :- *(1) Project [experimentid#6,description#7]
   :  +- *(1) Filter NOT (description#7 = Unidentified)
   :     +- BatchScan[experimentid#6,description#7] Cassandra Scan: mdb.experiment
 - Cassandra Filters: []
 - Requested Columns: [experimentid,description]
   +- broadcastExchange HashedRelationbroadcastMode(List(input[0,string,true])),[id=#19]
  +- LocalTableScan [experimentid#4]

是否应该启用与 cassandra 表的直接连接?现在完成加入大约需要 8 分钟,我想看看直接加入是否会更快。

解决方法

刚找到!看来我只需要通过添加来激活连接器

.config("spark.sql.extensions","com.datastax.spark.connector.CassandraSparkExtensions")

在火花配置中。惊人的表现。现在只需 8 秒!