Spark 使用 Python:将 RDD 输出保存到文本文件中
Posted
技术标签:
【中文标题】Spark 使用 Python:将 RDD 输出保存到文本文件中【英文标题】:Spark using Python : save RDD output into text files 【发布时间】:2015-12-04 11:17:10 【问题描述】:我正在使用 python 在 spark 中尝试字数问题。但是当我尝试使用 .saveAsTextFile 命令将输出 RDD 保存在文本文件中时,我遇到了问题。这是我的代码。请帮我。我被困住了。感谢您的时间。
import re
from pyspark import SparkConf , SparkContext
def normalizewords(text):
return re.compile(r'\W+',re.UNICODE).split(text.lower())
conf=SparkConf().setMaster("local[2]").setAppName("sorted result")
sc=SparkContext(conf=conf)
input=sc.textFile("file:///home/cloudera/PythonTask/sample.txt")
words=input.flatMap(normalizewords)
wordsCount=words.map(lambda x: (x,1)).reduceByKey(lambda x,y: x+y)
sortedwordsCount=wordsCount.map(lambda (x,y):(y,x)).sortByKey()
results=sortedwordsCount.collect()
for result in results:
count=str(result[0])
word=result[1].encode('ascii','ignore')
if(word):
print word +"\t\t"+ count
results.saveAsTextFile("/var/www/myoutput")
【问题讨论】:
问题出在哪里,请问可以显示错误吗? 请正确格式化您的问题以突出显示代码 Traceback(最近一次调用最后):文件“/home/cloudera/PythonTask/sorteddata.py”,第 24 行,在sortedwordsCount
感谢大家的帮助。
【参考方案1】:
因为你收集了results=sortedwordsCount.collect()
所以,它不是 RDD。它将是普通的 python 列表或元组。
如您所知,list
是 python 对象/数据结构,append
是添加元素的方法。
>>> x = []
>>> x.append(5)
>>> x
[5]
类似地,
RDD
是 sparks 对象/数据结构,saveAsTextFile
是写入文件的方法。重要的是它的分布式数据结构。
因此,我们不能在 RDD 上使用 append
或在列表上使用 saveAsTextFile
。 collect
是 RDD 上的方法,用于获取 RDD 到驱动程序内存。
如cmets中所说,使用saveAsTextFile保存sortedwordsCount
或在python中打开文件并使用results
写入文件
【讨论】:
感谢您的建议。所以请告诉我现在应该如何将结果存储在文本文件中。其实我是python编程的新手,所以对此了解不多。【参考方案2】:将results=sortedwordsCount.collect()
更改为results=sortedwordsCount
,因为使用.collect()
结果将是一个列表。
【讨论】:
以上是关于Spark 使用 Python:将 RDD 输出保存到文本文件中的主要内容,如果未能解决你的问题,请参考以下文章
在 Amazon s3 中将 Spark RDD 编写为 Gzipped 文件