我正在尝试在Java中使用spark-graphx。使用Graph.apply功能时,需要VD和ED的两个scala.reflect.ClassTag输入。我尝试了以下几种方法:
ClassTag$.MODULE$.apply(String.class)和:
ClassTag$.MODULE$.apply("".getClass())但是它似乎返回java.lang.Object而不是java.lang.String,并且maven在编译时会给出一个错误。我更改了我的边和顶点类型为Object,它工作得很好,但是,我希望稍后将它们保留为String或Integer。我想知道为什么上面的代码不能工作。下面是完整的函数:
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“,它就能正常工作。
发布于 2016-02-25 11:12:42
好吧,我把java编译器版本改成了1.8,这个问题就解决了。
https://stackoverflow.com/questions/35595498
复制相似问题