首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark Java -无法为java.lang.String获取正确的类标签

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

Stack Overflow用户
提问于 2016-02-24 15:08:29
回答 1查看 1K关注 0票数 1

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

代码语言:javascript
复制
    ClassTag$.MODULE$.apply(String.class)

和:

代码语言:javascript
复制
    ClassTag$.MODULE$.apply("".getClass())

但是它似乎返回java.lang.Object而不是java.lang.String,并且maven在编译时会给出一个错误。我更改了我的边和顶点类型为Object,它工作得很好,但是,我希望稍后将它们保留为String或Integer。我想知道为什么上面的代码不能工作。下面是完整的函数:

代码语言:javascript
复制
    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“,它就能正常工作。

EN

回答 1

Stack Overflow用户

发布于 2016-02-25 11:12:42

好吧,我把java编译器版本改成了1.8,这个问题就解决了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35595498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档