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 行,在 results.saveAsTextFile("var/www/myoutput") AttributeError : 'list' 对象没有属性 'saveAsTextFile' 尝试保存sortedwordsCount 感谢大家的帮助。 【参考方案1】:

因为你收集了results=sortedwordsCount.collect() 所以,它不是 RDD。它将是普通的 python 列表或元组。

如您所知,list 是 python 对象/数据结构,append 是添加元素的方法。

>>> x = []
>>> x.append(5)
>>> x
[5]

类似地,RDD 是 sparks 对象/数据结构,saveAsTextFile 是写入文件的方法。重要的是它的分布式数据结构。

因此,我们不能在 RDD 上使用 append 或在列表上使用 saveAsTextFilecollect 是 RDD 上的方法,用于获取 RDD 到驱动程序内存。

如cmets中所说,使用saveAsTextFile保存sortedwordsCount或在python中打开文件并使用results写入文件

【讨论】:

感谢您的建议。所以请告诉我现在应该如何将结果存储在文本文件中。其实我是python编程的新手,所以对此了解不多。【参考方案2】:

results=sortedwordsCount.collect() 更改为results=sortedwordsCount,因为使用.collect() 结果将是一个列表。

【讨论】:

以上是关于Spark 使用 Python:将 RDD 输出保存到文本文件中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Spark 将 RDD 写入文本文件

在 Amazon s3 中将 Spark RDD 编写为 Gzipped 文件

Spark:scala - 如何将集合从 RDD 转换为另一个 RDD

Spark RDD Operations

在 Spark 中合并 Row()

如何在spark(Python)中将两个rdd组合成on rdd