java - Spark Java - 无法获取 java.lang.String 的正确类标签

标签 java scala apache-spark scala-java-interop spark-graphx

我正在尝试在Java中使用spark-graphx。使用 Graph.apply 函数时,需要两个 scala.reflect.ClassTag 输入用于 VD 和 ED。我尝试了以下方法:

    ClassTag$.MODULE$.apply(String.class)

和:

    ClassTag$.MODULE$.apply("".getClass())

但它似乎返回 java.lang.Object 而不是 java.lang.String 并且 maven 在编译时给出错误。我将边缘和顶点类型更改为“对象”并且工作正常,但是,我想稍后将它们保留为“字符串”或“整数”。我想知道为什么上面的代码不起作用。下面是完整的功能:

    SparkConf conf = new SparkConf().setAppName("GGenerate").setMaster("local").set("spark.cores.max", "10");
    JavaSparkContext context = new JavaSparkContext(conf);
    List<scala.Tuple2<Long,String>> l1 = new ArrayList<scala.Tuple2<Long, String>>();
    l1.add(new scala.Tuple2<Long, String>(1L,"Alice"));
    l1.add(new scala.Tuple2<Long, String>(2L, "Bob"));
    l1.add(new scala.Tuple2<Long, String>(3L, "Charlie"));
    JavaRDD<scala.Tuple2<Object,String>> vert=context.parallelize(l1);

    List<Edge<String>> rd =
            new ArrayList<Edge<String>>();
    rd.add(new Edge<String>(1L,2L,"worker"));
    rd.add(new Edge<String>(2L, 3L, "friend"));
    JavaRDD<Edge<String>> edge=context.parallelize(rd);


    Graph.apply(vert.rdd(), edge.rdd(), "default",  StorageLevel.MEMORY_AND_DISK_2(),
             StorageLevel.MEMORY_AND_DISK_2(), ClassTag$.MODULE$.apply("".getClass()),
             ClassTag$.MODULE$.apply("".getClass()));

如果我将上面代码中的“String”和“Long”更改为“Object”,它就可以正常工作。

最佳答案

嗯,我把java编译器版本改为1.8,问题就解决了。

关于java - Spark Java - 无法获取 java.lang.String 的正确类标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35595498/

相关文章:

scala - 从函数返回的映射中获取值,在 Scala 中使用隐式

java - Apache Spark MLlib : OLS regression in Java

java - 累加器是线程安全的吗?

apache-spark - Spark SQL - 处理列名中的双引号

apache-spark - 无法从 Spark 连接到 cassandra

java - 无法从 Activity 类访问 GLSurfaceview 类中声明的变量(没有静态)

java - 对于大而准确的数字,我应该使用什么数据类型?

java - IText7 仅在新文档上创建表单/小部件

java - 使用 RS256 生成 token ,Jwts.builder().signWith() 产生无效签名

scala - 在两个 ScalaJS SBT 项目之间使用 DependsOn