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