Я пытаюсь взять 25 верхних элементов из JavaPairRDD
следующим образом:
JavaPairRDD rdd = ...;
List<Tuple2<String, Long>> top25 = rdd.top(25, (t1, t2) -> {
if (!t1._2.equals(t2._2)) {
return -1 * Long.compare(t1._2, t2._2);
}
else {
return t1._1.compareTo(t2._1);
}
})
Это сортировка на основе сначала значения и, если значения равны, то по ключам.Когда я запускаю его, я получаю следующее исключение:
Exception in thread "main" org.apache.spark.SparkException: Task not serializable
Мне кажется, проблема в том, что встроенная лямбда-функция, играющая роль Comparator
, не сериализуема.
У меня естьполучил два вопроса.Во-первых, если мое предположение верно, почему Comparator
должен быть сериализуемым?И второе, как решить эту проблему?