Cómo calcular la Media móvil Centrada de un conjunto de datos en Hadoop Reducir el Mapa?

Quiero para calcular la media móvil Centrada de un conjunto de Datos .

Example Input format :

quarter | sales      
Q1'11   | 9            
Q2'11   | 8
Q3'11   | 9
Q4'11   | 12
Q1'12   | 9
Q2'12   | 12
Q3'12   | 9
Q4'12   | 10

Representación matemática de los datos y el cálculo de la media móvil y, a continuación, centrada en la media móvil

Period   Value   MA  Centered
1          9
1.5
2          8
2.5              9.5
3          9            9.5
3.5              9.5
4          12           10.0
4.5              10.5
5          9            10.750
5.5              11.0
6          12
6.5
7          9  

Estoy atascado con la aplicación de RecordReader que proporcionará asignador el valor de las ventas de un año, es decir de cuatro cuartos.
El RecordReader Pregunta Del Problema Hilo
Gracias

  • ¿Por qué necesita MapReduce para esta tarea?
  • Estamos implementando el uso de R ,pero sólo quería utilizar map-reduce a resolver el problema .

2 Kommentare

  1. 2

    De esta realidad es totalmente factible en el paradigma MapReduce; no han de ser entendidas como una «ventana deslizante’. En lugar de pensar en el hecho de que cada punto de datos es relevante para un máximo de cuatro MA cálculos, y recordar que cada llamada a la función map puede emitir más de un par clave-valor. Aquí es pseudo-código:

    First MR job:
    
    map(quarter, sales)
        emit(quarter - 1.5, sales)
        emit(quarter - 0.5, sales)
        emit(quarter + 0.5, sales)
        emit(quarter + 1.5, sales)
    
    reduce(quarter, list_of_sales)
        if (list_of_sales.length == 4):
            emit(quarter, average(list_of_sales))
        endif
    
    
    Second MR job:
    
    map(quarter, MA)
        emit(quarter - 0.5, MA)
        emit(quarter + 0.5, MA)
    
    reduce(quarter, list_of_MA)
        if (list_of_MA.length == 2):
            emit(quarter, average(list_of_sales))
        endif
    • Pensé que reducir el mapa tiene sentido cuando tenemos serios cantidad de datos. Y, a continuación, vamos a tener más de un mapper. En este caso no estoy seguro de cómo vamos a procesar los datos en el asignador de la frontera
    • Sí, MapReduce está pensado para funcionar en una gran cantidad de datos. Y la idea es que, en general, las funciones map y reduce no importa cómo muchos miembros de la comunidad o de cómo muchos de los reductores hay, que acaba de optimización. Si usted piensa cuidadosamente sobre el algoritmo que he publicado, se puede ver que no importa que mapper obtiene qué partes de los datos. Cada registro de entrada estará disponible a reducir cada operación que necesita.
    • I C! Bueno! De hecho, inteligente solución!
  2. 1

    En lo mejor de mi entendimiento de la media móvil no es muy bien los mapas de MapReduce paradigma ya que su cálculo es esencialmente «ventana deslizante» más datos ordenados, mientras el SEÑOR es el procesamiento de la no-cruzaba los rangos de datos ordenados.

    La solución que yo veo es de la siguiente manera:

    A) poner en práctica personalizada particionador de ser capaz de hacer dos particiones diferentes en dos carreras. En cada ejecución
    su reductores de diferentes rangos de datos y calcular la media móvil donde approprieate

    Trataré de ilustrar:

    En primer lugar los datos de ejecución de los reductores deben ser:

    R1: Q1, Q2, Q3, Q4

    R2: Q5, Q6, Q7, Q8

    aquí se cacluate media móvil para algunos Qs.

    En la próxima ejecución de su reductores deben obtener datos como:
    R1: P1 P6…

    R2: P6…Q10

    R3: Q10..P14

    Y caclulate el resto de los promedios móviles.

    Entonces usted tendrá que agregar resultados.

    Idea de personalizado particionador que tendrá dos modos de funcionamiento, cada vez que se dividan en igualdad de rangos, pero con algún cambio. En un pseudocódigo se parecerá a esto :

    partición = (clave+MAYÚS) /(MAX_KEY/numOfPartitions) ;

    donde:
    CAMBIO será tomado a partir de la configuración.

    MAX_KEY = máximo valor de la clave. Yo supongamos por simplicidad que comienzan de cero.

    RecordReader, en mi humilde opinión no es una solución, ya que está limitado a determinados split y no puede deslizarse sobre split límite.

    Otra solución sería implementar la lógica personalizada de la división de los datos de entrada (es parte de la InputFormat). Puede ser hecho para hacer 2 diferentes diapositivas, similar a la creación de particiones.

    • Gracias @David Gruzman yo estaba tratando de implementar el RecordReader para «corredera de entrada» para el mapper , pero estoy atascado allí .[hilo RecordReader Qus ](stackoverflow.com/questions/12455088/…) Puede dar más detalles sobre personalizado particionador (lógico) implementación ?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea