kz
03/22/2018, 9:00 PMSerializable
implementations.
Thread starts here: https://kotlinlang.slack.com/archives/C1H43FDRB/p1521752154000105thomasnield
03/22/2018, 9:24 PMczyzby
03/22/2018, 9:25 PMczyzby
03/22/2018, 9:25 PMthomasnield
03/22/2018, 9:56 PMkz
03/22/2018, 10:03 PMkz
03/22/2018, 10:03 PMkz
03/22/2018, 10:04 PMthomasnield
03/23/2018, 12:34 AMthomasnield
03/23/2018, 12:34 AMkz
03/23/2018, 12:42 AMSerializable
.kz
03/23/2018, 12:42 AMkz
03/23/2018, 12:43 AMkz
03/23/2018, 12:43 AMthomasnield
03/23/2018, 12:44 AMkz
03/23/2018, 12:44 AMrdd.takeOrdered(10, comparingBy {it.first})
kz
03/23/2018, 12:47 AMComparator
Serializable
which meant (at least until we find some better fix) that we had to stop using those utility builders.thomasnield
03/23/2018, 12:48 AMkz
03/23/2018, 12:49 AMkz
03/23/2018, 12:50 AMpublic static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}
kz
03/23/2018, 12:51 AMComparator.comparing((Serializable & Function<Pair<String, Integer>, Integer>) Pair::getSecond)
thomasnield
03/23/2018, 12:52 AMthomasnield
03/23/2018, 12:53 AMkz
03/23/2018, 12:53 AMval conf = SparkConf().setAppName("Example")
conf.setMaster("local[1]")
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
val sc = JavaSparkContext(conf)
val rdd = sc.emptyRDD<Pair<String, Int>>()
rdd.takeOrdered(10, compareByDescending { it.second })
The last line makes the task not serializable.kz
03/23/2018, 1:23 AMfun <T> JavaRDD<T>.takeOrderedKz(num: Int, delegate: Comparator<T>): MutableList<T> {
val comparatorClass = delegate.javaClass
return takeOrdered(num, object : Comparator<T>, Serializable {
private var impl: Comparator<T>? = null
private val comparator: Comparator<T>
get() {
if (impl == null) {
impl = comparatorClass.newInstance()
}
return impl!!
}
override fun compare(o1: T, o2: T): Int = comparator.compare(o1, o2)
})
}
elizarov
03/23/2018, 6:34 AMthomasnield
03/23/2018, 1:14 PMkz
03/23/2018, 1:14 PMkz
03/23/2018, 1:51 PM