зеркало из https://github.com/microsoft/spark.git
Merge pull request #548 from markhamstra/getWritableClass_filter
Fixed broken filter in getWritableClass[T]
This commit is contained in:
Коммит
2be2295ff2
|
@ -36,17 +36,17 @@ class SequenceFileRDDFunctions[K <% Writable: ClassManifest, V <% Writable : Cla
|
|||
self: RDD[(K, V)])
|
||||
extends Logging
|
||||
with Serializable {
|
||||
|
||||
|
||||
private def getWritableClass[T <% Writable: ClassManifest](): Class[_ <: Writable] = {
|
||||
val c = {
|
||||
if (classOf[Writable].isAssignableFrom(classManifest[T].erasure)) {
|
||||
if (classOf[Writable].isAssignableFrom(classManifest[T].erasure)) {
|
||||
classManifest[T].erasure
|
||||
} else {
|
||||
// We get the type of the Writable class by looking at the apply method which converts
|
||||
// from T to Writable. Since we have two apply methods we filter out the one which
|
||||
// is of the form "java.lang.Object apply(java.lang.Object)"
|
||||
// is not of the form "java.lang.Object apply(java.lang.Object)"
|
||||
implicitly[T => Writable].getClass.getDeclaredMethods().filter(
|
||||
m => m.getReturnType().toString != "java.lang.Object" &&
|
||||
m => m.getReturnType().toString != "class java.lang.Object" &&
|
||||
m.getName() == "apply")(0).getReturnType
|
||||
|
||||
}
|
||||
|
@ -69,17 +69,17 @@ class SequenceFileRDDFunctions[K <% Writable: ClassManifest, V <% Writable : Cla
|
|||
val valueClass = getWritableClass[V]
|
||||
val convertKey = !classOf[Writable].isAssignableFrom(self.getKeyClass)
|
||||
val convertValue = !classOf[Writable].isAssignableFrom(self.getValueClass)
|
||||
|
||||
logInfo("Saving as sequence file of type (" + keyClass.getSimpleName + "," + valueClass.getSimpleName + ")" )
|
||||
|
||||
logInfo("Saving as sequence file of type (" + keyClass.getSimpleName + "," + valueClass.getSimpleName + ")" )
|
||||
val format = classOf[SequenceFileOutputFormat[Writable, Writable]]
|
||||
if (!convertKey && !convertValue) {
|
||||
self.saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
self.saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
} else if (!convertKey && convertValue) {
|
||||
self.map(x => (x._1,anyToWritable(x._2))).saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
self.map(x => (x._1,anyToWritable(x._2))).saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
} else if (convertKey && !convertValue) {
|
||||
self.map(x => (anyToWritable(x._1),x._2)).saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
self.map(x => (anyToWritable(x._1),x._2)).saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
} else if (convertKey && convertValue) {
|
||||
self.map(x => (anyToWritable(x._1),anyToWritable(x._2))).saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
}
|
||||
self.map(x => (anyToWritable(x._1),anyToWritable(x._2))).saveAsHadoopFile(path, keyClass, valueClass, format)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче