C#에서 맵 생성 및 축소 함수
C#의 Map
및 Reduce
기능은 대량의 원시 데이터를 처리하기 위한 알고리즘 작성을 위해 개발되었습니다. 병렬 컴퓨팅을 통해 개발자는 이러한 방대한 규모의 분산 데이터를 처리하여 데이터가 있는 위치 근처에서 필요한 계산을 실행할 수 있습니다.
이 자습서에서는 Map
및 Reduce
기능을 사용하고 만드는 두 가지 방법과 C#에서의 구현을 배웁니다. 병렬화, 데이터 배포, 내결함성 등의 복잡성을 숨기면서 이러한 함수를 처음부터 작성하거나 LINQ의 도움을 받아 작성할 수 있습니다.
Map
및 Reduce
기능은 모두 독립적인 입력 데이터 세트에서 실행되며 각 기능은 해당 데이터 소스를 처리합니다.
Map
및 Reduce
클러스터에는 프로세스에 추가 복잡성을 도입하는 여러 대의 컴퓨터가 포함됩니다. C# 개발자는 병렬로 실행되는 Map
및 Reduce
프로그램의 알고리즘을 작성할 때 다중 스레드 프로그래밍 및 잠금에 익숙해야 합니다.
LINQ를 사용하여 C#
에서 Map
및 Reduce
함수 생성
Map
및 Reduce
기능은 다양한 수학적 알고리즘을 구현하여 작업을 작은 부분으로 나누고 여러 시스템에 할당합니다. 기술 용어로 Map
및 Reduce
알고리즘은 정렬, 검색, 인덱싱 및 기타 Map
및 Reduce
작업을 클러스터의 적절한 서버로 보내는 데 도움이 됩니다.
LINQ를 사용하는 Map
및 Reduce
기능은 빅 데이터 문제를 해결하기 위한 민첩하고 탄력적인 접근 방식이지만 고유한 복잡성으로 인해 C# 개발자가 전문 지식을 얻는 데 시간이 걸립니다. 간단한 Map
및 Reduce
프로그램의 논리적 실행은 다음과 같습니다.
// 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));
LINQ를 사용한 기능적 C# 프로그래밍은 알고리즘 작성에 대한 대중적인 접근 방식입니다. LINQ 및 C# 3.5 이상은 다른 이름으로 비슷한 기능을 합니다.
지도
는선택 | Enumerable.Range(1, 10).Select(x => x + 2);
.감소
는집계 | Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);
.
LINQ를 사용하여 위에서 설명한 Map
및 Reduce
프로그램을 구현할 수 있습니다.
LINQ를 사용하는 C#의 Map
함수:
// 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();
}
}
}
LINQ를 사용하는 C#의 Reduce
함수:
// 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();
}
}
}
C#에서의 Map
및 Reduce
는 대량의 데이터를 처리하며, MapReduce
및 Hadoop
과 같은 많은 프레임워크에서 이러한 기능을 구현합니다. LINQ를 사용하여 작성된 C#의 Map
및 Reduce
프로그램은 여러 스레드가 입력 데이터의 다양한 부분에 동시에 매핑되어 매핑 결과가 중앙 위치에 배치되고, Reduce
가 작동하는 다른 스레드에서 추가 처리를 위해 사용될 수 있는 단일 컴퓨터에서 실행되는 프로세스를 보여줍니다.
C#
에서 처음부터 Map
및 Reduce
함수 생성
관계형 데이터베이스로 작업하고 데이터 집계를 접할 때 GroupBy
절과 Min
, Max
및 Count
와 같은 표준 작업을 즉시 생각합니다. C#의 Map
및 reduce
기능은 많은 양의 정보를 가져와 더 작은 덩어리로 줄일 수 있는 데이터 집계의 한 형태입니다.
축소하기 전에 정보를 맞춤형 축소 프로세스를 위한 구조 설계로 변환(매핑)할 수 있습니다. Map
은 함수를 취하는 고차 함수이며 목록은 해당 함수를 각 목록에 적용하고 결과 목록을 반환합니다.
함수 x = x + 2
와 정수 목록 1 -> 3
이 주어집니다. 다음은 Map
함수의 C# 구현입니다.
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);
}
출력:
3 4 5 6 7 8 9 10 11 12
‘Reduce’는 요소 목록을 가져와 해당 목록의 모든 요소에 적용된 함수를 반환합니다. (x, t) => x + y
함수와 1에서 3
까지의 요소 목록이 주어지면 Reduce
함수의 C# 구현은 다음과 같습니다.
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;
}
출력:
55
상위 추상화로서의 ‘Map’ 및 ‘Reduce’ 함수는 하위 함수에 대한 병렬화를 숨깁니다.
C#에서 기본 시스템은 Map
및 Reduce
기능의 실행 및 실행을 관리하며 실제 복잡성과 정교함은 직접 작성하여 피할 수 있습니다.
이 자습서에서는 Map
및 Reduce
의 기본 개념과 이를 C#에서 만들고 사용하는 방법을 배웠습니다.
C#에서 LINQ를 사용하거나 사용하지 않고 Map
및 Reduce
기능은 매우 크고 복잡한 데이터 처리 작업의 빠른 소비에 대한 혁신적인 접근 방식을 제공합니다. C# 언어는 Map
및 Reduce
처리에 적합합니다.
Map
및 Reduce
기능을 사용하여 거의 모든 규모의 데이터 처리 작업을 수용할 수 있습니다.
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