Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark Cassandra Connector 3.0.0-如何启用DirectJoin-Java_Java_Apache Spark_Join_Cassandra_Spark Cassandra Connector - Fatal编程技术网

Spark Cassandra Connector 3.0.0-如何启用DirectJoin-Java

Spark Cassandra Connector 3.0.0-如何启用DirectJoin-Java,java,apache-spark,join,cassandra,spark-cassandra-connector,Java,Apache Spark,Join,Cassandra,Spark Cassandra Connector,我有cassandra 3.11.9、spark 3.0.1和spark cassandra连接器3.0.0(依赖项)。我试图使用SCC 3.0.0的直接连接,但似乎当我在下面的数据集上使用连接时,我得到了spark的广播哈希连接 Dataset<Row> metlistinitial = sp.read().format("org.apache.spark.sql.cassandra") .options(new HashMap<S

我有cassandra 3.11.9、spark 3.0.1和spark cassandra连接器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]
Dataset metlistinitial=sp.read().format(“org.apache.spark.sql.cassandra”)
.options(新的HashMap(){
{
put(“键空间”、“mdb”);
put(“表格”、“实验”);
}
})
.load().select(列(“实验ID”)、列(“说明”))
.join(dfexplist,“实验ID”)
.filter(col(“description”).notEqual(“不明”);
metlistinitial.explain();
==实际计划==
*(1) 项目[实验ID#6,说明#7]
+-*(1)BroadcastHashJoin[experimentid#6],[experimentid#4],内部,BuildRight
:-*(1)项目[实验ID#6,说明#7]
:+-*(1)过滤器不可用(说明#7=未识别)
:+-BatchScan[experimentid#6,description#7]卡桑德拉扫描:mdb.experience
-卡桑德拉过滤器:[]
-请求的列:[实验ID,说明]
+-BroadcastExchange HashedRelationBroadcastMode(列表(输入[0,字符串,true]),[id=#19]
+-LocalTableScan[experimentid#4]

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

刚刚找到!似乎我必须通过添加来激活连接器

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

在spark配置中。惊人的表现。现在只需要8秒

你可以在这篇博文中找到更多关于加入的信息:是的,它也帮助了我!不过我刚刚注意到,如果我们想根据分区键获取一些记录,使用DirectJoin非常有效,速度也非常快。但是,如果我们想要获取20亿条记录,并使用分区键列表(即4.800个唯一分区键)直接连接它们,则需要大约15-20分钟,而使用BroadcastHashJoin of spark则需要大约7分钟。您可以调整不同的内容,例如,直接连接停止工作时的比率等等,如果分区键在列表中被指定为
,那么它可能不会自动转换为直接连接。这是一个非常好的消息!不,我没有使用filter.isin(列表),只需加入即可。不过,我想了解更多有关董事会的信息。公式基本上是(表大小*directJoinSizeRatio)>键的大小。所谓表大小是指字节还是行数?同样对于键的大小,是否以字节为单位?有没有计算cassandra表大小(以字节为单位)或键大小的公式?还有,这是否意味着卡桑德拉的紧凑空间?例如,当我在一个节点上输入cfstats时,它显示为8.7716Gb。实际上,我只是把它作为一个新问题添加了进来