WedX - журнал о программировании и компьютерных науках

Как читать файлы из HDFS в Reducer с помощью Rhipe (R)

Я работаю над созданием нескольких картографов и редукторов. Два маппера и редуктора делают свое дело и сохраняют вывод в выходной папке HDFS. Теперь мне нужно прочитать эти два уменьшенных файла из HDFS из третьего преобразователя, но я не мог понять, как это сделать. Я делаю уменьшение карты с помощью Rhipe. Вот код:

reduce.test <- (expression(
  pre = { 
     total <- 0 
     #read file from previous reducers -- this didn't work
     pos.mod <- readLines("/path/to/file/in/hdfs")  

    #error received: Error in file(con, "r"); cannot open connection

  }, 
  reduce = { total <- sum(total, unlist(reduce.values)) }, 
  post = { rhcollect(reduce.keys, total) }

))
20.11.2014

  • используйте потоковую передачу Hadoop :) 20.11.2014
  • @B.Mr.W. Не могли бы вы уточнить? Я не уверен, как я могу использовать Hadoop Streaming из редуктора с помощью R. Спасибо. 20.11.2014
  • Смотрите мой ответ, в редукторной части есть немного накладных расходов при написании потоковой передачи Hadoop, но как только вы закончите с этим один раз, это будет сделано навсегда. 20.11.2014

Ответы:


1

Что ж, это просто еще один вариант использования R для обработки больших наборов данных, вместо использования Rhipe. У меня есть некоторый опыт использования потоковой передачи Hadoop, и мне это очень подходит.

Короче говоря, вы можете использовать любой язык для написания заданий сокращения карты с помощью Hadoop Streaming.

Вот некоторый код, который я написал ранее, чтобы дать вам краткое представление о том, как он выглядит в R.

Вы можете настроить свой собственный myfunction, и он должен быть почти готов.

#!/usr/bin/Rscript
library(dplyr)
f <- file("stdin")
open(f, open="r")
mydelimiter <- '\t'
mydelimiter_col <- rawToChar(as.raw(1))
myfunction <- function(inputarray){
    ...
    return(result)
}

# FIRST LINE
firstline <- readLines(f, n=1)
fields <- unlist(strsplit(firstline, split=mydelimiter))
mykey_current <- fields[1]
myvalue_array <- array(fields[2])

while( length(line<-readLines(f, n=1)) > 0){
    fields <- unlist(strsplit(line, split=mydelimiter))
    mykey_new <- fields[1]
    myvalue_new <- fields[2]

    if (identical(mykey_new, mykey_current)) {
        # Same Key: append new value to existing value array
        myvalue_array <- c(myvalue_array, myvalue_new)
    } else {
        # Different Key
        # (1): process existing values
        result <- myfunction(myvalue_array)
        cat(mykey_current); cat(mydelimiter)
        cat(result); cat('\n')
        # (2): reset key, value
        mykey_current <- mykey_new
        myvalue_array <- array(myvalue_new)
    }
}

# LAST LINE
result <- myfunction(myvalue_array)
cat(mykey_current); cat(mydelimiter)
cat(result); cat('\n')

Для запуска задания потоковой передачи Hadoop. Я пишу небольшой баш, который выглядит так:

#!/bin/bash
hdfs dfs -rmr <hdfspath_output>

hadoop jar \
/opt/cloudera/parcels/CDH-5.1.0-1.cdh5.1.0.p0.53/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.3.0-mr1-cdh5.1.0.jar \
-files mapper.py,reducer.R \
-input <hdfspath_input> \
-output <hdfspath_output> \
-mapper mapper.py \
-reducer reducer.R
20.11.2014
  • Спасибо за ответ. К сожалению, я должен использовать Rhipe для этого проекта. Все остальное работает очень хорошо, за исключением чтения файла в редюсере. 20.11.2014
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]