簡體   English   中英

將RDD保存為pyspark中的序列文件

[英]Saving RDD as sequence file in pyspark

我可以運行此腳本以文本格式保存文件,但是當我嘗試運行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")

要寫入Sequence文件,您需要使用Hadoop API格式的數據。

文字字符串
詮釋為可寫

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM