Python 修改Spark读取的文本文件
在使用Spark时,我试图在Hadoop集群中的几个文本文件中计算单词数。我设法获得字数,但我还想做一些进一步的修改,如忽略数字或将所有单词转换为小写。我不能正常地迭代RDD数据。我尝试过使用collect(),但map函数不接受list作为参数。我还尝试将regex逻辑直接应用于RDD的“filter”函数,但没有成功。这是我到目前为止编写的代码,它在没有我注释掉的部分的情况下工作Python 修改Spark读取的文本文件,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,在使用Spark时,我试图在Hadoop集群中的几个文本文件中计算单词数。我设法获得字数,但我还想做一些进一步的修改,如忽略数字或将所有单词转换为小写。我不能正常地迭代RDD数据。我尝试过使用collect(),但map函数不接受list作为参数。我还尝试将regex逻辑直接应用于RDD的“filter”函数,但没有成功。这是我到目前为止编写的代码,它在没有我注释掉的部分的情况下工作 from pyspark import SparkConf, SparkContext import re co
from pyspark import SparkConf, SparkContext
import re
conf = SparkConf().setAppName("Word count")
sc = SparkContext(conf=conf)
sc.setLogLevel("WARN")
text = sc.textFile("/data/book/*.txt") \
.flatMap(lambda line: line.split())
#handledText = text.map(lambda s: s.replace("\d", "", text))
counts = text.map(lambda word: (word, 1)) \
.groupByKey() \
.map(lambda p: (p[0], sum(p[1])))
res = counts.takeOrdered(text.count(), key=lambda p: -p[1])
print(res)
text.map(lambda s:s.replace(“\d”,”,text))
您将Python中的内置函数map()
与Spark的DataFrame.map()
混淆了。。。否,文本
参数在此处无效
试试这个
def lower_no_digit(word):
return lower(word.replace(r'\d+', ''))
counts = text.map(lower_no_digit) \
.filter(lambda w : len(w) > 0) \
.map(lambda word: (word, 1)) \
在应用(word,1)
旁白-在SparkSQL中执行同样的操作比较简单,不需要手动放置(word,1)
我已经试过使用collect()了
不要映射(lambda x:…,df.collect())
。这将把所有数据都带到本地Spark驱动程序,并破坏了运行分布式处理框架的目的