将Spark Java转换为Spark scala

3

我正在尝试将我的Java代码转换为Spark中的scala代码,但发现它非常复杂。是否有可能将以下Java代码转换为scala代码?谢谢!


JavaPairRDD<String,Tuple2<String,String>> newDataPair = newRecords.mapToPair(new PairFunction<String, String, Tuple2<String, String>>() {

            private static final long serialVersionUID = 1L;

            @Override
            public Tuple2<String, Tuple2<String, String>> call(String t) throws Exception {
                MyPerson p = (new Gson()).fromJson(t, MyPerson.class);

                String nameAgeKey = p.getName() + "_" + p.getAge() ;

                Tuple2<String, String> value = new Tuple2<String, String>(p.getNationality(), t);
                Tuple2<String, Tuple2<String, String>> kvp =
                    new Tuple2<String, Tuple2<String, String>>(nameAgeKey.toLowerCase(), value);
                return kvp;
            }
        });

我尝试了以下操作,但我确定我错过了很多东西。实际上,对于如何在scala中执行重写函数并不清楚...请给出建议或分享一些示例。谢谢!

val newDataPair = newRecords.mapToPair(new PairFunction<String, String, Tuple2<String, String>>() {

        @Override
        public val call(String t) throws Exception {
            val p = (new Gson()).fromJson(t, MyPerson.class);
            val nameAgeKey = p.getName() + "_" + p.getAge() ;
            val value = new Tuple2<String, String>(p.getNationality(), t);
            val kvp =
                new Tuple2<String, Tuple2<String, String>>(nameAgeKey.toLowerCase(), value);
            return kvp;
        }
    });

1
请展示一下您尝试过的内容。 - yjshen
这是我尝试过的: - Edamame
1个回答

3
从Spark-Java到Spark-Scala的字面翻译通常不起作用,因为Spark-Java引入了许多工具来应对Java中有限的类型系统。例如,Java中的mapToPair在Scala中仅是mapTuple2的语法更加简洁:(a,b)
将此应用于片段(以及更多内容):
val newDataPair = newRecords.map{t =>                
    val p = (new Gson()).fromJson(t, classOf[MyPerson])
    val nameAgeKey = p.getName + "_" + p.getAge
    val value = (p.getNationality(), t)
    (nameAgeKey.toLowerCase(), value)
}

这段内容可以更简洁,但我想保持与Java对应的结构,以便更容易理解。


我在MyPerson.class的行上收到了“identifier expected but 'class' found”的错误,代码如下:val p = (new Gson()).fromJson(t, MyPerson.class)。请问我错过了什么?谢谢! - Edamame
@Edamame 噢,修好了,又是 Java 和 Scala 的问题 :-) 顺便说一下,我不熟悉 Guava 的 Gson 如何与 Scala 互操作 - 可能可以直接使用。否则,你需要进一步研究。 - maasg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接