Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark Cassandra连接器错误:java.lang.NoClassDefFoundError:com/datastax/Spark/Connector/TableRef_Apache Spark_Pyspark_Spark Structured Streaming_Spark Cassandra Connector - Fatal编程技术网

Apache spark Spark Cassandra连接器错误:java.lang.NoClassDefFoundError:com/datastax/Spark/Connector/TableRef

Apache spark Spark Cassandra连接器错误:java.lang.NoClassDefFoundError:com/datastax/Spark/Connector/TableRef,apache-spark,pyspark,spark-structured-streaming,spark-cassandra-connector,Apache Spark,Pyspark,Spark Structured Streaming,Spark Cassandra Connector,我没有使用DSE。下面是将数据帧写入Cassandra数据库的测试代码 Spark version:3.00 scala:2.12 Cassandra::3.11.4 spark-cassandra-connector_2.12-3.0.0-alpha2.jar 我能够对dataframe执行一些操作并将其打印到控制台,但我无法保存,甚至无法从我的Cassandra数据库中读取它。我得到的错误是: spark = SparkSession \ .builder

我没有使用DSE。下面是将数据帧写入Cassandra数据库的测试代码

Spark version:3.00
scala:2.12
Cassandra::3.11.4
spark-cassandra-connector_2.12-3.0.0-alpha2.jar
我能够对dataframe执行一些操作并将其打印到控制台,但我无法保存,甚至无法从我的Cassandra数据库中读取它。我得到的错误是:

        spark = SparkSession \
        .builder \
        .config("spark.jars","spark-streaming-kafka-0-10_2.12-3.0.0.jar,spark-sql-kafka-0-10_2.12-3.0.0.jar,kafka-clients-2.5.0.jar,commons-pool2-2.8.0.jar,spark-token-provider-kafka-0-10_2.12-3.0.0.jar,**spark-cassandra-connector_2.12-3.0.0-alpha2.jar**") \
        .config("spark.cassandra.connection.host", "127.0.0.1")\
        .config('spark.cassandra.output.consistency.level', 'ONE')\
        .appName("StructuredNetworkWordCount") \
        .getOrCreate()

    streamingInputDF = spark \
        .readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", "192.168.56.1:9092") \
        .option("subscribe", "def") \
        .load()
##Dataset operations

    def write_to_cassandra(streaming_df,E):
    streaming_df\
        .write \
        .format("org.apache.spark.sql.cassandra") \
        .options(table="a", keyspace="abc") \
         .save()
       
    q1 =sites_flat.writeStream \
    .outputMode('update') \
    .foreachBatch(write_to_cassandra) \
    .start()
q1.awaitTermination()
我尝试过其他cassandra连接器版本(2.5),但得到了相同的错误
请帮忙

问题在于您使用的是
spark.jars
选项,这些选项只在类路径中包含提供的jar。但是
TableRef
案例类位于
spark cassandra连接器驱动程序
包中,该包是
spark cassandra连接器
的依赖项。要解决此问题,最好使用
-packages com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-alpha2
(与kafka支持相同)启动
pyspark
spark submit
——在这种情况下,spark将获取所有必要的依赖项并将它们放入类路径

另外,在
alpha2
发行版中,您可能会在获取某些依赖项时遇到问题,例如,
ffi
groovy
,等等。这是一个已知的错误(主要是在Spark中):,已经修复,我们希望很快就能得到测试版的下降

更新(14.03.2021):最好使用包含所有必要依赖项的

p.p.S.对于从Spark Structured Streaming写入Cassandra,请不要使用
foreachbatch
,只作为普通数据接收器使用:

val query=streamingCountsDF.writeStream
.outputMode(outputMode.Update)
.format(“org.apache.spark.sql.cassandra”)
.选项(“检查点位置”webhdfs://192.168.0.10:5598/checkpoint")
.选项(“键空间”、“测试”)
.选项(“表格”、“sttest_tweets”)
.start()

我遇到了同样的问题,请尝试:

      File "C:\opt\spark-3.0.0-bin-hadoop2.7\python\lib\py4j-0.10.9-src.zip\py4j\protocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o70.load.
: java.lang.NoClassDefFoundError: com/datastax/spark/connector/TableRef
    at org.apache.spark.sql.cassandra.DefaultSource$.TableRefAndOptions(DefaultSource.scala:142)
    at org.apache.spark.sql.cassandra.DefaultSource.createRelation(DefaultSource.scala:56)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:339)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:279)
    at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:268)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:268)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:203)

org.apache.spark
spark-core_2.12
2.4.3

版本兼容性被认为是原因

您不需要foreachbatch-您可以从流直接写入Cassandra-只需指定
格式
,…此外,如果您只需要将数据从Kafka移动到Cassandra,请查看Kafka连接器:不,他有正确的版本,他只是没有指定所有的JAR…但我试着用它来解决问题,这是我的代码:他的问题是关于Spark 3.0,它只有一个版本——Scala 2.12。版本指定正确,问题是作者在提交作业时没有使用
--packages
,因此没有自动提取依赖项
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>2.4.3</version>
</dependency>