【问题标题】:Cassandra Spark Connector JavaDemo compile errorCassandra Spark 连接器 JavaDemo 编译错误
【发布时间】:2017-04-19 22:12:02
【问题描述】:

我正在使用 Cassandra 2.2.8、JDK8、spark-cassandra-connector-java_2.10、spark-cassandra-connector_2.11-2.0.0-M3、cassandra-driver-core-3.1.0 及以下版本 Cassandra Spark Connector Example JavaDemo。必须修复此演示以使用新的 2.1 Connetcor API 进行编译。我已经修复了几件事,但下面的这件事让我很难过: 此行编译错误:

JavaPairRDD<Integer, BigDecimal> allSalesRDD = joinedRDD.flatMap(new PairFlatMapFunction<Tuple2<Integer, Tuple2<Sale, Product>>, Integer, BigDecimal>() {
        @Override
        public Iterable<Tuple2<Integer, BigDecimal>> call(Tuple2<Integer, Tuple2<Sale, Product>> input) throws Exception {

错误:

The method 
    flatMap(FlatMapFunction<Tuple2<Integer,Tuple2<SparkJavaDemo.Sale,SparkJavaDemo.Product>>,U>) in the type 
         AbstractJavaRDDLike<Tuple2<Integer,Tuple2<SparkJavaDemo.Sale,SparkJavaDemo.Product>>,JavaPairRDD<Integer,Tuple2<SparkJavaDemo.
         Sale,SparkJavaDemo.Product>>> is not applicable for the arguments (new 
         PairFlatMapFunction<Tuple2<Integer,Tuple2<SparkJavaDemo.Sale,SparkJavaDemo.Product>>,Integer,BigDecimal>(){})

谢谢

【问题讨论】:

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


    【解决方案1】:

    您可以使用flatMapToPair 代替flatMap,如下所示。

    JavaPairRDD<Integer, BigDecimal> allSalesRDD = joinedRDD.flatMapToPair(new PairFlatMapFunction<Tuple2<Integer, Tuple2<Sale, Product>>, Integer, BigDecimal>() {
            @Override
            public Iterator<Tuple2<Integer, BigDecimal>> call(Tuple2<Integer, Tuple2<Sale, Product>> input) throws Exception {
                Tuple2<Sale, Product> saleWithProduct = input._2();
                List<Tuple2<Integer, BigDecimal>> allSales = new ArrayList<>(saleWithProduct._2().getParents().size() + 1);
                allSales.add(new Tuple2<>(saleWithProduct._1().getProduct(), saleWithProduct._1().getPrice()));
                for (Integer parentProduct : saleWithProduct._2().getParents()) {
                    allSales.add(new Tuple2<>(parentProduct, saleWithProduct._1().getPrice()));
                }
                return allSales.iterator();
            }
        });
    

    我在https://gist.github.com/baghelamit/f2963d9e37acc55474559104f5f16cf1创建了更新代码的要点

    【讨论】:

    • 试过这个现在得到一个不同的错误:` public Iterator> call(Tuple2> input) ` 返回类型不兼容与 PairFlatMapFunction>,Integer,BigDecimal>.call(Tuple2>)`
    • 使用核心 3.1 java 驱动程序时出现的单独编译错误(适用于 2.1)资源类型 Session 未实现 java.lang.AutoCloseable try (Session session = connector.openSession()) `
    • 我已经更新了 JavaDemo 的 pom.xml 和 java 类。更新的文件位于gist.github.com/baghelamit/f2963d9e37acc55474559104f5f16cf1。你检查了吗?
    • 似乎能够编译最后很好 - 添加 spark-sql 并升级到核心 3.12。会话错误是由有问题的 dse.jar 文件引起的。当我删除它时 - 它编译得很好。然而,在包声明本身,eclipse 显示错误:The type scala.reflect.api.TypeTags$TypeTag cannot be resolved. It is indirectly referenced from required .class files 当我尝试运行时,它显然给出了错误Unresolved compilation problem: @main 我确实有 scala 2.10。罐子在我的路上。
    • 通过添加 scala-reflect-2.11.jar 解决了 scala.reflect 编译错误。 终于没有编译错误了。现在运行时错误 - hadoop/hdfs(添加了 hadoop-common2.7.3.jar),然后java.lang.NoClassDefFoundError: org/spark_project/guava/cache/CacheLoader 添加了 spark-network-common_2.11.jar。 但错误仍然存​​在(我已经有 guava-16.0.jar)
    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 2015-03-12
    • 2020-10-17
    • 2017-01-13
    • 1970-01-01
    • 2021-11-11
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多