Scala无法在RDD中保存为序列文件,因为它允许使用doc

时间:2018-03-12 01:59:51

标签: scala rdd sequencefile

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

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

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

1 个答案:

答案 0 :(得分:1)

saveAsSequenceFile仅在RDD中具有键值对时可用。原因是它在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]。