如何在 Spark 中从 cassandra datastax 云中读取数据

Posted

技术标签:

【中文标题】如何在 Spark 中从 cassandra datastax 云中读取数据【英文标题】:How to read data from cassandra datastax cloud in Spark 【发布时间】:2020-12-22 11:42:26 【问题描述】:

如何在 spark 2.0 中从 Cassandra Datastax 读取数据?

这是我尝试过的 -

val df = spark.read.format("org.apache.spark.sql.cassandra").options(Map("keyspace" -> "my_keyspace",
        "table" -> "my_table",
        "spark.cassandra.connection.config.cloud.path" -> "file:///home/training/secure-connect-My_path.zip",
        "spark.cassandra.auth.password" -> "password",
        "spark.cassandra.auth.username" -> "Username"
      ))
      .load()

我收到此错误:

Exception in thread "main" java.lang.ClassNotFoundException: Failed to find data source: org.apache.spark.sql.cassandra. Please find packages at http://spark.apache.org/third-party-projects.html

当我使用 datastax zip 时,为什么需要安装 Cassandra 或执行任何其他步骤?

使用相同的 zip 文件,我可以读取 java 程序中的数据。为什么我无法读入 Spark?

【问题讨论】:

【参考方案1】:

你在正确的轨道上。如果您从 Spark shell 连接,您将传递如下详细信息:

$ spark-shell --packages com.datastax.spark:spark-cassandra-connector_2.11:2.5.0 \
  --files /path/to/your/secure-connect-dbname.zip \
  --conf spark.cassandra.connection.config.cloud.path=secure-connect-dbname.zip \
  --conf spark.cassandra.auth.username=astra_username \
  --conf spark.cassandra.auth.password=astra_password

那么您的代码将如下所示:

import org.apache.spark.sql.cassandra._

val df = spark.read.cassandraFormat("ks_name", "tbl_name").load()

详情请见Spark Cassandra Connector documentation on connecting to Astra。还有来自 Alex Ott 的这篇博文,"Advanced Apache Cassandra Analytics Now Open For All"。干杯!

【讨论】:

主要问题是spark 2.0【参考方案2】:

DataStax Astra 仅在 Spark Cassandra Connector 2.5.0+ 中得到原生支持,这需要 Spark 2.4(尽管它也适用于 2.3)。从理论上讲,您可以从安全包中提取证书和其他信息并使用它,但这是一项繁琐的任务。所以最好升级Spark版本。

但最初的问题是未提供包 - 请参阅@flightc 的答案。

【讨论】:

说到男人本人!关于我错过的 Spark 版本的好点。 :) @flightc 最初他应该按照您的指示进行操作,因为包裹丢失了

以上是关于如何在 Spark 中从 cassandra datastax 云中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

在一个查询中从多个主键中提取条目

如何在spark中读写cassandra数据

spark如何在cassandra表之间复制数据?

如何在 Cassandra 中使用 spark 获取行范围

如何在 Spark 中过滤来自 Cassandra 的空数据?

如何在 Windows 中使用 Scala 将 Cassandra 与 Spark 连接起来