我可以运行此脚本以文本格式保存文件,但是当我尝试运行saveAsSequenceFile时,它出错了。如果有人对如何将RDD保存为序列文件有任何想法,请告诉我该过程。我尝试在“ Learning Spark”以及官方Spark文档中寻找解决方案。

这成功运行

dataRDD = sc.textFile("/user/cloudera/sqoop_import/departments")
dataRDD.saveAsTextFile("/user/cloudera/pyspark/departments")


这失败了

dataRDD = sc.textFile("/user/cloudera/sqoop_import/departments")
dataRDD.saveAsSequenceFile("/user/cloudera/pyspark/departmentsSeq")



  错误:呼叫时发生错误
  z:org.apache.spark.api.python.PythonRDD.saveAsSequenceFile。 :
  org.apache.spark.SparkException:类型为java.lang.String的RDD元素
  不能使用


数据如下:

2,Fitness
3,Footwear
4,Apparel
5,Golf
6,Outdoors
7,Fan Shop
8,TESTING
8000,TESTING

最佳答案

序列文件用于存储键值对,因此您不能简单地存储RDD[String]。根据您的数据,我想您正在寻找的是这样的东西:

rdd = sc.parallelize([
    "2,Fitness", "3,Footwear", "4,Apparel"
])
rdd.map(lambda x: tuple(x.split(",", 1))).saveAsSequenceFile("testSeq")


如果要保留整个字符串,请使用None键:

rdd.map(lambda x: (None, x)).saveAsSequenceFile("testSeqNone")

10-01 10:57