首页 > 解决方案 > 为什么 WritableConverter 是私有的?

问题描述

我想要一个函数来打开一个 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是私有的,使得编译失败。问题:

  1. 为什么是WritableConverter私人的?我感觉它使扩展sequenceFile[K,V]. 此外,重用可用的转换器会很有用。
  2. 如何解决这个问题以便仍然能够使用 Scala 类型而不是 的实例进行函数调用Writable,例如sequenceFileWithPath[String, Int]

标签: scalaapache-spark

解决方案


推荐阅读