Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Spark Java转换为Spark scala_Java_Scala_Apache Spark - Fatal编程技术网

将Spark Java转换为Spark scala

将Spark Java转换为Spark scala,java,scala,apache-spark,Java,Scala,Apache Spark,我试图在Spark中将Java代码转换为scala,但发现它非常复杂。是否可以将以下Java代码转换为scala?谢谢 javapairdd newDataPair=newRecords.mapToPair(new PairFunction()){ 私有静态最终长serialVersionUID=1L; @凌驾 公共元组2调用(字符串t)引发异常{ MyPerson p=(new Gson()).fromJson(t,MyPerson.class); 字符串名称key=p.getName()+

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


javapairdd newDataPair=newRecords.mapToPair(new PairFunction()){
私有静态最终长serialVersionUID=1L;
@凌驾
公共元组2调用(字符串t)引发异常{
MyPerson p=(new Gson()).fromJson(t,MyPerson.class);
字符串名称key=p.getName()+“”+p.getAge();
Tuple2值=新的Tuple2(p.getNationary(),t);
Tuple2千伏=
新的Tuple2(nameAgeKey.toLowerCase(),value);
返回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;
        }
    });
val newDataPair=newRecords.mapToPair(new PairFunction(){
@凌驾
公共val调用(字符串t)引发异常{
val p=(new Gson()).fromJson(t,MyPerson.class);
val-nameAgeKey=p.getName()+“”+p.getAge();
val值=新的元组2(p.getNationary(),t);
val kvp=
新的Tuple2(nameAgeKey.toLowerCase(),value);
返回kvp;
}
});

从Spark Java到Spark Scala的文字翻译通常不起作用,因为Spark Java引入了许多工件来处理Java中有限的类型系统。本例中的示例:
mapToPair
在Java中只是
map
在Scala中<代码>元组2具有更简洁的语法
(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的行中获得了“预期的标识符,但找到了“class”:val p=(new Gson())。fromJson(t,MyPerson.class)。。。我错过了什么?谢谢@毛豆oops-修复-另一个java vs scala的东西:-)-顺便说一句,我不熟悉Guava的Gson如何与scala互操作-可能按原样工作。否则,您将不得不进一步研究。
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)
}