我能够运行这个脚本来以文本格式保存文件,但是当我试图运行saveAsSequenceFile时,它就会出错。如果有人知道如何将RDD保存为序列文件,请让我知道这个过程。我试着在“学习火花”和官方火花文档中寻找解决方案。
它成功运行。
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
发布于 2015-12-28 02:50:55
序列文件用于存储键值对,因此不能简单地存储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")
发布于 2015-12-28 02:35:36
要写入序列文件,您需要Hadoop格式的数据。
字符串作为文本
Int作为IntWritable
在Python中:
data = [(1, ""),(1, "a"),(2, "bcdf")]
sc.parallelize(data).saveAsNewAPIHadoopFile(path,"org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat","org.apache.hadoop.io.IntWritable","org.apache.hadoop.io.Text")
https://stackoverflow.com/questions/34491579
复制