为啥我们没有在 Spark-Cassandra-Connector 中定义一个 ReaderBuilder 来从 cassandra DB 读取数据

Posted

技术标签:

【中文标题】为啥我们没有在 Spark-Cassandra-Connector 中定义一个 ReaderBuilder 来从 cassandra DB 读取数据【英文标题】:Why don't we have a ReaderBuilder defined in Spark-Cassandra-Connector for reading data from cassandra DB为什么我们没有在 Spark-Cassandra-Connector 中定义一个 ReaderBuilder 来从 cassandra DB 读取数据 【发布时间】:2019-10-04 17:16:01 【问题描述】:

我看到了 spark-cassandra-connector 的 github 存储库,但我没有发现 ReaderBuilder 实现了它们,但实现了 WriterBuilder,任何人都可以帮助我,因为我想使用 CassandraConnector 参考从 cassandra DB 读取数据。

我想在同一个 SparkContext 中连接两个 cassandra 集群,并且我想从这两个集群中读取数据,因此我需要一个 ReaderBuilder 来从我的第二个 cassandra 集群中读取数据,我也在这里使用 java 语言。

Github 回购链接:https://github.com/datastax/spark-cassandra-connector/blob/master/spark-cassandra-connector/src/main/java/com/datastax/spark/connector/japi/RDDAndDStreamCommonJavaFunctions.java

CassandraConnector eventsConnector = CassandraConnector.apply(sc.getConf().set("spark.cassandra.connection.host", "192.168.36.234"));

【问题讨论】:

github.com/datastax/spark-cassandra-connector/blob/master/doc/….. 不回答你的问题.. 但是从同一个 sparkContext 连接到多个集群的方法 我尝试实现这种方法,但如您所见,它用于从一个集群读取并写入另一个集群,使用这种方法无法从第二个集群读取。所以问题还是一样。 【参考方案1】:

我的第一个建议是不要在 Java 中使用 RDD。 Java 中的 RDD 比 Scala 中的要困难得多,而且它也是旧的 api。我建议改用 DataFrames。这些在不同数据源之间提供了更清晰的接口,并提供了自动优化和其他好处。

现在,如果您不能使用 DataFrames,您只需制作 CassandraJavaRDD,然后使用“withConnector”或“withReadConf”来更改读取配置。

https://github.com/datastax/spark-cassandra-connector/blob/master/spark-cassandra-connector/src/main/java/com/datastax/spark/connector/japi/rdd/CassandraJavaRDD.java#L123-L129

类似

val cluster2 = CassandraConnector eventsConnector = 
  CassandraConnector.apply(
    sc.getConf()
      .set("spark.cassandra.connection.host", "192.168.36.234"));

  javaFunctions(sc).cassandraTable(ks, "test_table").withConnector(cluster2).collect()

不需要构建器,因为 RDD 本身具有流畅的 API。由于在调用结束时会立即写入,因此需要一个构建器。

【讨论】:

以上是关于为啥我们没有在 Spark-Cassandra-Connector 中定义一个 ReaderBuilder 来从 cassandra DB 读取数据的主要内容,如果未能解决你的问题,请参考以下文章

java中标记接口的意义何在?为啥没有它们我们就不能继续?

为啥我们没有在 Spark-Cassandra-Connector 中定义一个 ReaderBuilder 来从 cassandra DB 读取数据

为啥 list-tail 会引发异常?为啥我们没有关于 cdr 的闭包属性?

为啥地图上没有我们村?

结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为啥?

为啥没有 enctype 属性文件上传不起作用?