Apache spark Can';t从pyspark从cassandra数据库加载信息

Apache spark Can';t从pyspark从cassandra数据库加载信息,apache-spark,pyspark,cassandra,spark-cassandra-connector,Apache Spark,Pyspark,Cassandra,Spark Cassandra Connector,我有以下代码: 导入操作系统 从pyspark导入SparkContext、SparkFiles、SQLContext、SparkFiles 从pyspark.sql导入SQLContext,SparkSession 从pyspark.sql.functions导入col secure_bundle_file=os.getcwd()+'\\secure connect dbtest.zip' sparkSession=sparkSession.builder.appName('SparkCass

我有以下代码:

导入操作系统
从pyspark导入SparkContext、SparkFiles、SQLContext、SparkFiles
从pyspark.sql导入SQLContext,SparkSession
从pyspark.sql.functions导入col
secure_bundle_file=os.getcwd()+'\\secure connect dbtest.zip'
sparkSession=sparkSession.builder.appName('SparkCassandraApp')\
.config('spark.cassandra.connection.config.cloud.path',secure\u bundle\u文件)\
.config('spark.cassandra.auth.username','test')\
.config('spark.cassandra.auth.password','testquart')\
.config('spark.dse.continuousPaginEnabled',False)\
.master('local[*]')。getOrCreate()
data=sparkSession.read.format(“org.apache.spark.sql.cassandra”)\
.options(table=“tbdesh”,keyspace=“test”).load()
data.count()
我尝试做的是连接到我的数据库并检索我的数据。代码很好地连接到数据库,但一旦它到达读取行,它就会说:

Exception has occurred: Py4JJavaError
An error occurred while calling o48.load.
: 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
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:674)
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSourceV2(DataSource.scala:728)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:230)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
有人能帮我吗

此外,我还想添加有关此代码的更多详细信息:

我想做的是测试spark从我的数据库中读取200万条记录需要多长时间,普通的python cassandra驱动程序在大约1小时内读取了200万条记录(使用SimpleStatement),所以这里我想知道使用spark处理这200万条记录需要多长时间


谢谢

您的类路径中没有Spark Cassandra连接器包,因此它找不到相应的类

您需要使用
--packages com.datastax.spark:spark-cassandra-connector_2.11:2.5.1
开始您的工作(
spark submit
pyspark

如果您真的只想从python代码中执行,那么您可以尝试在创建
SparkSession
时添加
.config(“spark.jars.packages”,“com.datastax.spark:spark-cassandra-connector_2.11:2.5.1”)
,但如果已经实例化了类路径,那么它可能并不总是有效


p.S.Spark通常应优于
SimpleStatement
,即使在本地模式下也是如此,尽管Spark在分布式模式下确实表现出色。您确实不应该使用
SimpleStatement
重复执行仅参数不同的查询-您应该使用它。请阅读指南。DataStax还提供了本书的第三版——刚刚出版——我建议您阅读。

您的类路径中没有Spark Cassandra Connector包,因此它找不到相应的类

您需要使用
--packages com.datastax.spark:spark-cassandra-connector_2.11:2.5.1
开始您的工作(
spark submit
pyspark

如果您真的只想从python代码中执行,那么您可以尝试在创建
SparkSession
时添加
.config(“spark.jars.packages”,“com.datastax.spark:spark-cassandra-connector_2.11:2.5.1”)
,但如果已经实例化了类路径,那么它可能并不总是有效

p.S.Spark通常应优于
SimpleStatement
,即使在本地模式下也是如此,尽管Spark在分布式模式下确实表现出色。您确实不应该使用
SimpleStatement
重复执行仅参数不同的查询-您应该使用它。请阅读指南。DataStax还赠送了这本书的第三版——刚刚出版——我建议你读一读。

我的问题解决了

问题不在于java、hadoop或spark,而在于连接器的下载过程,但我无法下载任何东西,因为这个JAR的缓存文件夹上有东西

my spark下载外部JAR的文件夹是C:\Users\UlysesRico.ivy2\jars缓存,因为它是C:\Users\UlysesRico.ivy2\cache

我只是删除了缓存和罐子的折页,然后我做了:

pyspark--包com.datastax.spark:spark-cassandra-connector_2.11:2.5.1 瞧,我下载了所有的罐子和缓存信息

问题终于解决了。

我的问题解决了

问题不在于java、hadoop或spark,而在于连接器的下载过程,但我无法下载任何东西,因为这个JAR的缓存文件夹上有东西

my spark下载外部JAR的文件夹是C:\Users\UlysesRico.ivy2\jars缓存,因为它是C:\Users\UlysesRico.ivy2\cache

我只是删除了缓存和罐子的折页,然后我做了:

pyspark--包com.datastax.spark:spark-cassandra-connector_2.11:2.5.1 瞧,我下载了所有的罐子和缓存信息


问题终于解决了。

我很困惑,我只是把它们下载到某个jar文件夹中,它不是spark/文件夹,而是dowload进程所处的位置。现在,有没有办法在python代码中包含“-packages com.datastax.spark:spark-cassandra-connector_2.11:2.5.1”,而不是通过控制台?就像使用os.Enviro?或者更好,在python代码中添加包的正确方法是什么?我确实应用了pyspark——packages com.datasax.spark:spark-cassandra-connector_2.11:2.5.1,我得到了这个错误“Java网关进程在发送端口号之前退出了”我认为这个com.datasax.spark连接器是获取数据的缺失链接,你今天告诉我的一切都起了作用,这是唯一缺少的部分。感谢您的帮助使用我描述的.config部分好的,我应用了“.config(…)”我添加了包,但我有相同的错误。当你说“classpath”时,你指的是一个环境变量?如果是这样的话,那么我想了解一些东西…我在spark/jar文件夹中有一些包,在某个临时文件夹中有另一些包,“类路径”是否有其他最初不在spark/jar中的包?我很困惑,我只是将它们下载到某个jar文件夹中,这不是spark/文件夹,而是dowload进程所处的位置。现在,有没有办法在python代码中包含“-packages com.datastax.spark:spark-cassandra-connector_2.11:2.5.1”,而不是通过控制台?比如使用os.e