Skip to main content
 首页 » 编程设计

python之将RDD保存为pyspark中的序列文件

2025年05月04日92sky-heaven

我能够运行此脚本以文本格式保存文件,但是当我尝试运行 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") 

Error: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.saveAsSequenceFile. : org.apache.spark.SparkException: RDD element of type java.lang.String cannot be used

数据如下:

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")