gpt4 book ai didi

r - 如何在R中编写map reduce?

转载 作者:行者123 更新时间:2023-12-04 09:40:54 31 4
gpt4 key购买 nike

我是 R 的新手。我知道如何在 Java 中编写 map reduce。我想在 R 中尝试相同的方法。所以任何人都可以帮助提供任何示例代码,并且 R 中的 MapReduce 是否有任何固定格式。

请发送除此之外的任何链接:https://github.com/RevolutionAnalytics/RHadoop/wiki/Tutorial

任何示例代码都会更有帮助。

最佳答案

当您想用 Java 以外的语言实现 map reduce(使用 Hadoop)时,您可以使用称为流的功能。然后数据通过 STDIN (readLines()) 馈送到映射器,通过 STDOUT(cat()) 返回到 Hadoop,然后通过 STDIN (readLines()) 再次返回到 reducer,最后通过 STDOUT (cat()) 脱口而出。

以下代码取自 article我写了一篇关于用 R 为 Hadoop 编写 map reduce 作业的文章。代码应该计算 2 克,但我想说的很简单,可以看看 MapReduce 方面发生了什么。

# map.R

library(stringdist, quietly=TRUE)

input <- file("stdin", "r")

while(length(line <- readLines(input, n=1, warn=FALSE)) > 0) {
# in case of empty lines
# more sophisticated defensive code makes sense here
if(nchar(line) == 0) break

fields <- unlist(strsplit(line, "\t"))

# extract 2-grams
d <- qgrams(tolower(fields[4]), q=2)

for(i in 1:ncol(d)) {
# language / 2-gram / count
cat(fields[2], "\t", colnames(d)[i], "\t", d[1,i], "\n")
}
}

close(input)

——
# reduce.R

input <- file("stdin", "r")

# initialize variables that keep
# track of the state

is_first_line <- TRUE

while(length(line <- readLines(input, n=1, warn=FALSE)) > 0) {
line <- unlist(strsplit(line, "\t"))
# current line belongs to previous
# line's key pair
if(!is_first_line &&
prev_lang == line[1] &&
prev_2gram == line[2]) {
sum <- sum + as.integer(line[3])
}
# current line belongs either to a
# new key pair or is first line
else {
# new key pair - so output the last
# key pair's result
if(!is_first_line) {
# language / 2-gram / count
cat(prev_lang,"\t",prev_2gram,"\t",sum,"\n")
}
# initialize state trackers
prev_lang <- line[1]
prev_2gram <- line[2]
sum <- as.integer(line[3])
is_first_line <- FALSE
}
}

# the final record
cat(prev_lang,"\t",prev_2gram, "\t", sum, "\n")

close(input)

http://www.joyofdata.de/blog/mapreduce-r-hadoop-amazon-emr/

关于r - 如何在R中编写map reduce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663159/

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