如何解决从Sparks Shell中的Cassandra读取数据
我想从我的客户节点上的cassandra节点读取数据:
这是我尝试过的:
spark-shell --jars /my-dir/spark-cassandra-connector_2.11-2.3.2.jar.
val df = spark.read.format("org.apache.spark.sql.cassandra")\
.option("keyspace","my_keyspace")\
.option("table","my_table")\
.option("spark.cassandra.connection.host","Hostname of my Cassandra node")\
.option("spark.cassandra.connection.port","9042")\
.option("spark.cassandra.auth.password","mypassword)\
.option("spark.cassandra.auth.username","myusername")\
.load
我收到此错误:java.lang.NoClassDefFoundError: Could not initialize class org.apache.spark.sql.cassandra.DefaultSource$
和
java.lang.NoClassDefFoundError: org/apache/commons/configuration/ConfigurationException.
我缺少任何属性吗?这个错误是为了什么?我该如何解决?
Spark版本:2.3.2,DSE版本6.7.8
解决方法
Spark Cassandra连接器本身取决于其他依赖项的数量,在这里可能会丢失-发生这种情况是因为您仅提供了一个jar,而不是所有必需的依赖项。
基本上,您需要选择以下选项:
- 如果在DSE节点上运行此数据库,则可以使用内置的Spark,如果集群已启用Analytics(分析)-在这种情况下,已经提供了所有jar和属性,您只需提供用户名和通过
dse -u user -p password spark
启动spark shell时输入密码
- 如果您使用的是外部Spark,则最好使用所谓的BYOS (bring your own spark)-特殊版本的Spark Cassandra Connector,其中包含所有依赖项,您可以从DataStax's Maven repo下载jar,并与
--jars
一起使用
- 您仍然可以使用开源Spark Cassandra Connector,但在这种情况下,最好使用
--packages com.datastax.spark:spark-cassandra-connector_2.11:2.3.2
,这样Spark才能自动获取所有依赖项。
P.S。对于开源Spark Cassandra连接器,我建议使用2.5.1或更高版本,尽管它需要Spark 2.4.x(尽管2.3.x可以工作)-this version has improved support for DSE,plus a lot of the new functionality not available in the earlier versions。另外,对于该版本,如果您的计算机无法访问互联网,则可以与--jars
一起使用version that includes all required dependencies (so-called assembly)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。