【问题标题】:Spark Cassandra Connector 3.0.0 - How to enable DirectJoin - JavaSpark Cassandra 连接器 3.0.0 - 如何启用 DirectJoin - Java
【发布时间】:2021-02-09 18:50:07
【问题描述】:

我有 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 分钟,我想看看直接加入是否会更快。

【问题讨论】:

    标签: java apache-spark join cassandra spark-cassandra-connector


    【解决方案1】:

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

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

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

    【讨论】:

    • 您可以在这篇博文中找到有关联接的更多信息:alexott.blogspot.com/2020/07/…
    • 是的,它也帮助了我!我刚刚注意到的一点是,如果我们想根据分区键获取一些记录,那么拥有 DirectJoin 的效果非常好而且非常快。但是,如果我们想获取 20 亿条记录并使用分区键列表(即 4.800 个唯一分区键)直接连接它们大约需要 15-20 分钟,而使用 spark 的 BroadcastHashJoin 大约需要 7 分钟。
    • 您可以调整不同的东西,例如直接连接停止工作时的比率等。此外,如果分区键为IN list,则它可能不会自动转换为直接连接
    • 这是个好消息!不,我没有使用 filter.isin(list),只是加入。不过,我想了解有关 directJoinSizeRatio 的更多信息。该公式基本上是(表大小 * directJoinSizeRatio)> 键的大小。说表大小是指字节数还是行数?同样对于键的大小,是否以字节为单位?是否有任何公式可以计算 cassandra 表大小(以字节为单位)或键的大小?另外,这是否意味着 cassandra 的压缩空间?例如,当我在一个节点上 cfstats 显示 8.7716Gb。
    • 其实我只是把它添加为一个新问题stackoverflow.com/questions/66133389/…
    猜你喜欢
    • 2018-04-03
    • 2021-05-23
    • 1970-01-01
    • 2015-08-16
    • 2015-09-13
    • 2016-09-02
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多