Crear mapa y reducir funciones en C#
-
Utilice LINQ para crear funciones
Mapa
yReducir
enC#
-
Crear funciones
Mapa
yReducir
desde cero enC#
Las funciones Map
y Reduce
en C# están desarrolladas para escribir algoritmos para procesar una gran cantidad de datos sin procesar. El cómputo paralelo permite a los desarrolladores procesar escalas tan masivas de datos distribuidos para ejecutar el cómputo requerido cerca de donde se encuentran los datos.
En este tutorial, aprenderá dos métodos diferentes para usar y crear las funciones Mapa
y Reducir
y su implementación en C#. Puede escribir estas funciones desde cero o con la ayuda de LINQ mientras oculta las complejidades de la paralelización, la distribución de datos, la tolerancia a fallas, etc.
Tanto las funciones Mapear
como Reducir
se ejecutan en un conjunto independiente de datos de entrada, y cada función procesa su fuente de datos.
El grupo Mapear
y Reducir
involucra múltiples computadoras que introducen una complejidad adicional en el proceso. Los desarrolladores de C# deben estar familiarizados con la programación y el bloqueo de subprocesos múltiples al escribir algoritmos de programas Map
y Reduce
ejecutados en paralelo.
Utilice LINQ para crear funciones Mapa
y Reducir
en C#
Las funciones Mapear
y Reducir
implementan varios algoritmos matemáticos para dividir tareas en partes pequeñas y asignarlas a múltiples sistemas. En términos técnicos, el algoritmo Asignar
y Reducir
ayuda a enviar la clasificación, búsqueda, indexación y otras tareas de Asignar
y Reducir
a los servidores apropiados en un clúster.
Si bien las funciones Map
y Reduce
que usan LINQ son enfoques ágiles y resistentes para resolver problemas de big data, su complejidad inherente significa que los desarrolladores de C# necesitan tiempo para adquirir experiencia. La ejecución lógica de un programa simple Mapear
y Reducir
se ve así:
// Logical execution
map(String key, String value):
// key: it holds the name of a document
// value: it holds the content of a document
for each word i in value:
EmitIntermediate(i, "1");
reduce(String key, Iterator values):
// key: it represents a word
// values: it holds the values of a work
int result = 0;
for each x in values:
resultReduce += ParseInt(x);
Emit(AsString(resultReduce));
La programación funcional en C# con LINQ es un enfoque popular para escribir algoritmos. LINQ y C# 3.5 y superior tienen funciones similares con diferentes nombres.
- El
Mapa
es paraSeleccionar | Enumerable.Rango(1, 10).Seleccionar(x => x + 2);
. - El
Reducir
es paraAgregar | Enumerable.Rango(1, 10).Agregado(0, (acc, x) => acc + x);
.
Usando LINQ, puede implementar los programas Mapa
y Reducir
descritos anteriormente:
Función Map
en C# usando LINQ:
// Add `System.Linq` and `System.Collections.Generic` namespace references in your C# project before
// executing the code
using System;
using System.Collections.Generic;
using System.Linq;
using static System.Console;
// Map function in C# using LINQ
namespace MapReduce {
class ProgramMap {
static void Main(string[] args) {
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = numbers.Select(x => x * x).ToArray();
foreach (var n in result) Write(n + " ");
Console.Read();
}
}
}
Función Reducir
en C# usando LINQ:
// Add `System.Linq` and `System.Collections.Generic` namespace referances in your C# project before
// executing the code
using System;
using System.Collections.Generic;
using System.Linq;
using static System.Console;
// Reduce function in C# using LINQ
namespace MapReduce {
class ProgramMap {
static void Main(string[] args) {
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = numbers.Aggregate((acc, x) => acc + x);
WriteLine($"Sum = {result}");
Console.Read();
}
}
}
Map
y Reduce
en C# manejan grandes cantidades de datos, y muchos marcos como MapReduce
y Hadoop
implementan estas funciones. El programa de C# Map
y Reduce
que usa LINQ ilustra los procesos que se ejecutan en una sola computadora donde varios subprocesos se asignan simultáneamente a varias porciones de los datos de entrada, colocando los resultados del mapeo en una ubicación centralizada para su posterior procesamiento por parte de otros subprocesos donde Reduce
opera.
Crear funciones Mapa
y Reducir
desde cero en C#
Cuando trabaja con bases de datos relacionales y se encuentra con la agregación de datos, inmediatamente piensa en una cláusula GroupBy
y las operaciones estándar, como Min
, Max
y Count
. Las funciones mapa
y reducir
en C# son una forma de agregación de datos donde puede tomar una gran cantidad de información y reducirla en partes más pequeñas.
Antes de reducir, puede traducir (mapear) la información en un diseño estructural para el proceso de reducción personalizado. El Mapa
es una función de orden superior que toma una función, y una lista aplica esa función a cada lista y devuelve la lista resultante.
Dada la función x = x + 2
, y una lista de números enteros 1 -> 3
. La siguiente es la implementación en C# de la función Mapa
:
static void Main(string[] args) {
var testList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var mapList = Map<int, int>(x => x + 2, testList);
mapList.ToList<int>().ForEach(i => Console.Write(i + " "));
Console.WriteLine();
Console.ReadKey();
}
static IEnumerable<TResult> Map<T, TResult>(Func<T, TResult> func, IEnumerable<T> list) {
foreach (var i in list) yield return func(i);
}
Producción :
3 4 5 6 7 8 9 10 11 12
Reducir
toma una lista de elementos y devuelve una función aplicada a todos los elementos de esa lista. Dada la función (x, t) => x + y
, y una lista de elementos 1 a 3
, la implementación en C# de la función Reducir
será:
static void Main(string[] args) {
var testList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Console.WriteLine(Reduce<int, int>((x, y) => x + y, testList, 0));
Console.ReadKey();
}
static T Reduce<T, U>(Func<U, T, T> func, IEnumerable<U> list, T acc) {
foreach (var i in list) acc = func(i, acc);
return acc;
}
Producción :
55
Las funciones Map
y Reduce
como abstracciones de orden superior ocultan la paralelización de las funciones inferiores.
En C#, el sistema subyacente se encarga de ejecutar y administrar la ejecución de las funciones Map
y Reduce
, y la complejidad y la sofisticación reales se pueden evitar escribiendo una por sí mismo.
En este tutorial, ha aprendido los conceptos básicos de Map
y Reduce
y cómo crearlos y usarlos en C#.
Con o sin LINQ en C#, las funciones Map
y Reduce
brindan un enfoque innovador para el consumo rápido de tareas de procesamiento de datos extremadamente grandes y complejas. El lenguaje C# es muy adecuado para el procesamiento Map
y Reduce
.
Con la ayuda de las funciones Mapa
y Reducir
, se pueden acomodar tareas de procesamiento de datos de casi cualquier tamaño.
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub