我正在使用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()
吗?
答案 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]。