Я хотел бы иметь функцию, которая открывает файл sequenceFile и предоставляет путь к файлу, содержащему пару K / V.Я думал что-то вроде этого:
def sequenceFileWithPath[K, V](
input: String,
minPartitions: Int
)(implicit
sc: SparkContext,
km: ClassTag[K],
vm: ClassTag[V],
kcf: () => WritableConverter[K],
vcf: () => WritableConverter[V]
): RDD[(Path, K, V)] = {
val rdd = sc.sequenceFile[K, V](input).asInstanceOf[HadoopRDD[K, V]]
rdd mapPartitionsWithInputSplit {
case (inputSplit, t) =>
val path = inputSplit.asInstanceOf[FileSplit].getPath
t map { case (k, v) => (path, k, v) }
}
}
`` `
Однако, WritableConverter
является приватным, что приводит к сбою компиляции.Вопросы:
- Почему
WritableConverter
приватно?Я чувствую, что это затрудняет расширение функциональности sequenceFile[K,V]
.Кроме того, было бы полезно повторно использовать имеющиеся конвертеры. - Как обойти это, чтобы иметь возможность вызова функции с использованием типов Scala вместо экземпляров
Writable
, например sequenceFileWithPath[String, Int]
?