我正在尝试在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/