Scala 无法在 RDD 中保存为序列文件,根据允许的文档

Scala not able to save as sequence file in RDD, as per doc it is allowed

我正在使用 Spark 1.6,根据 official doc 允许将 RDD 保存为序列文件格式,但是我注意到我的 RDD 文本文件:

scala> textFile.saveAsSequenceFile("products_sequence")
<console>:30: error: value saveAsSequenceFile is not a member of org.apache.spark.rdd.RDD[String]

我用谷歌搜索发现类似的讨论似乎表明这在 pyspark 中有效。我对官方文档的理解有误吗? saveAsSequenceFile() 可以在 Scala 中使用吗?

只有在 RDD 中有键值对时,saveAsSequenceFile 才可用。这样做的原因是它定义在PairRDDFunctions

https://spark.apache.org/docs/2.1.1/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions

您可以看到 API 定义采用了 K 和 V。

如果您将上面的代码更改为

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.rdd._

object SequeneFile extends App {
   val conf = new SparkConf().setAppName("sequenceFile").setMaster("local[1]")
   val sc = new SparkContext(conf)
   val rdd : RDD[(String, String)] = sc.parallelize(List(("foo", "foo1"), ("bar", "bar1"), ("baz", "baz1")))
   rdd.saveAsSequenceFile("foo.seq")
   sc.stop()
}

这非常有效,您将获得 foo.seq 文件。上面的原因是因为我们有一个 RDD,它是一个键值对,而不仅仅是一个 RDD[String].