如何使用 java 自定义比较器来订购 Spark RDD
How to use a java custom comparator for ordering a Spark RDD
我有一个 class 以这种方式实现比较器:
public class MyObject<T>
{
public static class MyObjectComp<T> implements Comparator<MyObject<T>>
{
private LinkedHashSet<Integer> attrList;
public MyObjectComp (int[] intList)
{
this.attrList = new LinkedHashSet<Integer>();
for (int idx: intList)
attrList.add(idx);
}
public MyObjectComp (LinkedHashSet<Integer> attrList)
{
this.attrList = attrList;
}
public int compare(MyObject<T> pf1, MyObject<T> pf2)
{
for (Integer idx: attrList)
{
double pf1Norm = pf1.atribute.get(idx).myList.size();
double pf2Norm = pf2.atribute.get(idx).myList.size();
if (pf1Norm > pf2Norm)
return 1;
else if (pf1Norm < pf2Norm)
return -1;
}
return (pf1.key > pf2.key) ? 1 : ((pf1.key < pf2.key) ? -1 : 0);
}
}
}
在用 scala 编写的代码的另一部分中,我用这个 MyObject 创建了一个 RDD。现在我需要使用 MyObject 的这个内部比较器 class 来排序这个 RDD 的元素。我怎么能使用像 myRDD. sort()?
这样的函数来做到这一点
类似的东西(注意:没有尝试过这段代码)
implicit val moo = new MyObjectComp[ T ]( /* ... */ ).asScala
myRDD.sortBy( t => t )
我有一个 class 以这种方式实现比较器:
public class MyObject<T>
{
public static class MyObjectComp<T> implements Comparator<MyObject<T>>
{
private LinkedHashSet<Integer> attrList;
public MyObjectComp (int[] intList)
{
this.attrList = new LinkedHashSet<Integer>();
for (int idx: intList)
attrList.add(idx);
}
public MyObjectComp (LinkedHashSet<Integer> attrList)
{
this.attrList = attrList;
}
public int compare(MyObject<T> pf1, MyObject<T> pf2)
{
for (Integer idx: attrList)
{
double pf1Norm = pf1.atribute.get(idx).myList.size();
double pf2Norm = pf2.atribute.get(idx).myList.size();
if (pf1Norm > pf2Norm)
return 1;
else if (pf1Norm < pf2Norm)
return -1;
}
return (pf1.key > pf2.key) ? 1 : ((pf1.key < pf2.key) ? -1 : 0);
}
}
}
在用 scala 编写的代码的另一部分中,我用这个 MyObject 创建了一个 RDD。现在我需要使用 MyObject 的这个内部比较器 class 来排序这个 RDD 的元素。我怎么能使用像 myRDD. sort()?
类似的东西(注意:没有尝试过这段代码)
implicit val moo = new MyObjectComp[ T ]( /* ... */ ).asScala
myRDD.sortBy( t => t )