gpt4 book ai didi

javascript - Spark 中的Python mapraduce

转载 作者:行者123 更新时间:2023-12-02 21:40:11 27 4
gpt4 key购买 nike

我有一些文字,我必须计算使用hadoop的某些单词(例如,John和已婚)的数量。

在Java脚本中,我可以这样写:

require('timothy').map(function(line){
emit("count", 1);
if(new RegExp("john", "i").test(line)) emit("John", 1);
if(new RegExp("marry", "i").test(line)) emit("Marry", 1);
}).reduce(function(key, values){
var result = 0;
values.forEach(function(value){
result += +value;
});

emit(key, result);
}).run();

我将map函数用于所有行,并为每个匹配项写入数据。现在我想用Spark做到这一点,但是我必须用python编写。我有一些代码:
import sys
import re

from operator import add
from pyspark import SparkContext

if __name__ == "__main__":
if len(sys.argv) != 2:
print >> sys.stderr, "Usage: wordcount <file>"
exit(-1)
sc = SparkContext(appName="PythonWordCount")
lines = sc.textFile(sys.argv[1], 1)

def map(line):
#here must contains map function;


counts = lines.map(map).reduceByKey(add)
output = counts.collect()
for (word, count) in output:
print "%s: %i" % (word, count)

sc.stop()

我的问题是我只能记录一个返回的匹配项(键,值),如何制作与第一个示例类似的方法。感谢你。

最佳答案

如果您要问的是我如何在 map 阶段发出多个值。答案是将flatMap运算符与返回一个值序列而不是单个值的函数一起使用。该序列将由flatMap转换拆分。例如:

file = spark.textFile("file://...")
counts = file.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
line.split(" ")返回一个字符串序列。

关于javascript - Spark 中的Python mapraduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29415327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com