Я пытаюсь использовать spark-graphx в Java. При использовании функции Graph.apply ему нужны два вложения scala.reflect.ClassTag для VD и ED. Я попытался следующие:Spark Java - Не удается получить правильный классовый файл для java.lang.String
ClassTag$.MODULE$.apply(String.class)
и:
ClassTag$.MODULE$.apply("".getClass())
но мне кажется, что она возвращает java.lang.Object вместо java.lang.String и Maven выдает ошибку при компиляции. Я изменил тип ребра и вершины на объект, и он работал нормально, однако я хочу сохранить их как 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» в «Объект» в приведенном выше коде, он отлично работает.
Чтобы привлечь внимание, я бы удалил тег 'maven' (maven - это только инструмент построения, это Java _compiler_, который дает ошибку) и добавляет тег' scala', поскольку это в основном Scala/Проблема взаимодействия Java. –
Спасибо, тег maven был добавлен по ошибке. Я добавил scala для большей видимости. – Majidgh