java - 使用 datastax Spark-cassandra java 连接器运行 Spark 和 cassandra 时出错

标签 java cassandra apache-spark spark-cassandra-connector

我在使用 Spark-cassandra 连接器时收到以下错误:

ERROR executor.Executor: Exception in task 0.0 in stage 10.0 (TID 207)
java.lang.NoSuchMethodError: org.apache.spark.executor.TaskMetrics.inputMetrics_$eq(Lscala/Option;)V
at com.datastax.spark.connector.metrics.InputMetricsUpdater$.apply(InputMetricsUpdater.scala:61)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.compute(CassandraTableScanRDD.scala:196)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:68)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
at org.apache.spark.scheduler.Task.run(Task.scala:64)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

我的代码:

    SparkConf conf = new SparkConf(true).setMaster("local").setAppName("org.sparkexample.SparkCassandra")
            .set("spark.executor.memory", "1g").set("spark.cassandra.connection.host", "localhost")
            .set("spark.cassandra.connection.native.port", "9042")
            .set("spark.cassandra.connection.rpc.port", "9160");
    SparkContext ctx = new SparkContext(conf);
    SparkContextJavaFunctions functions = CassandraJavaUtil.javaFunctions(ctx);

    JavaRDD<String> cassandraRowsRDD = functions.cassandraTable("sparktest", "SPARK_PERSON").map(
            new Function<CassandraRow, String>()
            {
                public String call(CassandraRow cassandraRow) throws Exception
                {
                    return cassandraRow.toString();
                }
            });
    System.out.println("Data as CassandraRows: \n" + StringUtils.join(cassandraRowsRDD.toArray(), "\n"));

我尝试用谷歌搜索这个问题,发现可以通过使用兼容的scala版本来解决。但我使用的是java连接器。

如何解决这个问题?

谢谢。

最佳答案

我将 Spark 版本从 1.3.1 降级为 1.2.1 以暂时解决此问题。我使用的是 spark-cassandra-connector-java_2.10 版本 1.2.1

关于java - 使用 datastax Spark-cassandra java 连接器运行 Spark 和 cassandra 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30592689/

相关文章:

cassandra - 关于复制设置的 nodetool 状态注释实际上是什么意思?

nosql - 关于Cassandra的优秀教程,以及一个小的数据库查询

java - 如何只准备一次 Cassandra 访问器查询

python - 如何查找 Pyspark 中列中值最大的行名称

apache-spark - 如何在 Yarn 上配置应用程序驱动程序的自动重启

java - 未找到 id 'com.android.application' 的问题

java - ArrayList 无法正确读入

java - 为什么有些库会与源代码和 javadoc jar 文件一起分发?

java - Canvas OnDraw方法

apache-spark - 为什么我的 pyspark 在启动时在 yarn 中以 ACCEPTED 状态挂起?