Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Javardd中的Sortby_Java_Apache Spark - Fatal编程技术网

Javardd中的Sortby

Javardd中的Sortby,java,apache-spark,Java,Apache Spark,我正在用java使用spark。我想把我的地图分类。事实上,我有这样的javard: JavaPairRDD<String, Integer> rebondCountURL = session_rebond_2.mapToPair(new PairFunction<Tuple2<String, String>, String, String>() { @Override public Tuple2<String, Stri

我正在用java使用spark。我想把我的地图分类。事实上,我有这样的javard:

JavaPairRDD<String, Integer> rebondCountURL = session_rebond_2.mapToPair(new PairFunction<Tuple2<String, String>, String, String>() {
        @Override
        public Tuple2<String, String> call(Tuple2<String, String> stringStringTuple2) throws Exception {
            return new Tuple2<String, String>(stringStringTuple2._2, stringStringTuple2._1);
        }
    }).groupByKey().map(new PairFunction<Tuple2<String, Iterable<String>>, Tuple2<String, Integer>>() {
        @Override
        public Tuple2<String, Integer> call(Tuple2<String, Iterable<String>> stringIterableTuple2) throws Exception {
            Iterable<String> strings = stringIterableTuple2._2;
            List<String> b = new ArrayList<String>();
            for (String s : strings) {
                b.add(s);
            }
            return new Tuple2<String, Integer>(stringIterableTuple2._1, b.size());
        }
    });
javapairdd reboondcounturl=session\u reboond\u 2.mapToPair(new PairFunction()){
@凌驾
公共Tuple2调用(Tuple2 StringTuple2)引发异常{
返回新的Tuple2(stringtuple2.\u 2,stringtuple2.\u 1);
}
}).groupByKey().map(新的PairFunction(){
@凌驾
公共Tuple2调用(Tuple2 stringIterableTuple2)引发异常{
Iterable字符串=stringIterableTuple2._2;
列表b=新的ArrayList();
用于(字符串s:字符串){
b、 添加(s);
}
返回新的Tuple2(stringIterableTuple2._1,b.size());
}
});
我想使用Sortby对这个JavaRDD进行排序(以便使用整数进行排序)

你能帮我做这件事吗


先谢谢你

您需要创建一个函数,从每个元素中提取排序键。我们代码中的示例

final JavaRDD<Something> stage2 = stage1.sortBy( new Function<Something, Long>() {
  private static final long serialVersionUID = 1L;

  @Override
  public Long call( Something value ) throws Exception {
    return value.getTime();
  }
}, true, 1 );
final JavaRDD stage2=stage1.sortBy(新函数(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共长调用(某物值)引发异常{
返回值。getTime();
}
},对,1);

只是一个与sortBy()相关的提示。。如果要对一组用户定义的对象(如Point)进行排序,请在类Point中实现Comparable接口,并重写compareTo()方法,在该方法中可以编写自己的排序逻辑。在此之后,sortby函数将负责排序逻辑


注意:您的Point类还必须实现java.io.Serializable接口,否则您将遇到NotSerializable异常。

这是基于@Vignesh建议的代码。您可以通过
比较器的任何自定义实现
排序。单独编写比较器,并在spark代码中使用参考,更为简洁:

 rdd ->{JavaRDD<MaxProfitDto> result = 
        rdd.keyBy(Recommendations.profitAsKey)
        .sortByKey(new CryptoVolumeComparator())
        .values()
rdd->{JavaRDD结果=
rdd.keyBy(建议使用profitAsKey)
.sortByKey(新的CryptoVolumeComparator())
.values()
因此,比较器如下所示:

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Comparator;

import models.CryptoDto;
import scala.Tuple2;

public class CryptoVolumeComparator implements Comparator<Tuple2<BigDecimal, CryptoDto>>, Serializable {
    private static final long serialVersionUID = 1L;
    @Override
    public int compare(Tuple2<BigDecimal, CryptoDto> v1, Tuple2<BigDecimal, CryptoDto> v2) {
        return  v2._1().compareTo(v1._1());
    }
}
import java.io.Serializable;
导入java.math.BigDecimal;
导入java.util.Comparator;
导入模型.CryptoDto;
导入scala.Tuple2;
公共类CryptoVolumeComparator实现可序列化的比较器{
私有静态最终长serialVersionUID=1L;
@凌驾
公共整数比较(Tuple2 v1,Tuple2 v2){
返回v2._1()。与(v1._1())比较;
}
}

这对我来说也很有效。对于像我这样的初学者,上面的函数会根据时间进行排序。只是想知道分区的数量如何影响排序?此参数控制执行排序的并行任务的数量。下一个处理级别将获得此数量的分区作为输入。例如,如果此参数r设置为10,下一个处理级别将RDD保存到一个文件中,将创建10个输出文件。增加分区数是否会使分区使用sortKey创建,而不会影响全局排序顺序?@Notinlist是
stage1
RDD(Scala)对象?我在中找不到它。@CᴴᴀZ可能我说的是1.1.0(发布于2014-09-11),但我记不清了。