2016-02-24 4 views
0

Я пытаюсь использовать 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» в «Объект» в приведенном выше коде, он отлично работает.

+0

Чтобы привлечь внимание, я бы удалил тег 'maven' (maven - это только инструмент построения, это Java _compiler_, который дает ошибку) и добавляет тег' scala', поскольку это в основном Scala/Проблема взаимодействия Java. –

+0

Спасибо, тег maven был добавлен по ошибке. Я добавил scala для большей видимости. – Majidgh

ответ

0

Ну, я изменил версию компилятора java на 1.8, и проблема была решена.