C#에서 맵 생성 및 축소 함수

Syed Hassan Sabeeh Kazmi 2023년10월12일
  1. LINQ를 사용하여 C#에서 MapReduce 함수 생성
  2. C#에서 처음부터 MapReduce 함수 생성
C#에서 맵 생성 및 축소 함수

C#의 MapReduce 기능은 대량의 원시 데이터를 처리하기 위한 알고리즘 작성을 위해 개발되었습니다. 병렬 컴퓨팅을 통해 개발자는 이러한 방대한 규모의 분산 데이터를 처리하여 데이터가 있는 위치 근처에서 필요한 계산을 실행할 수 있습니다.

이 자습서에서는 MapReduce 기능을 사용하고 만드는 두 가지 방법과 C#에서의 구현을 배웁니다. 병렬화, 데이터 배포, 내결함성 등의 복잡성을 숨기면서 이러한 함수를 처음부터 작성하거나 LINQ의 도움을 받아 작성할 수 있습니다.

MapReduce 기능은 모두 독립적인 입력 데이터 세트에서 실행되며 각 기능은 해당 데이터 소스를 처리합니다.

MapReduce 클러스터에는 프로세스에 추가 복잡성을 도입하는 여러 대의 컴퓨터가 포함됩니다. C# 개발자는 병렬로 실행되는 MapReduce 프로그램의 알고리즘을 작성할 때 다중 스레드 프로그래밍 및 잠금에 익숙해야 합니다.

LINQ를 사용하여 C#에서 MapReduce 함수 생성

MapReduce 기능은 다양한 수학적 알고리즘을 구현하여 작업을 작은 부분으로 나누고 여러 시스템에 할당합니다. 기술 용어로 MapReduce 알고리즘은 정렬, 검색, 인덱싱 및 기타 MapReduce 작업을 클러스터의 적절한 서버로 보내는 데 도움이 됩니다.

LINQ를 사용하는 MapReduce 기능은 빅 데이터 문제를 해결하기 위한 민첩하고 탄력적인 접근 방식이지만 고유한 복잡성으로 인해 C# 개발자가 전문 지식을 얻는 데 시간이 걸립니다. 간단한 MapReduce 프로그램의 논리적 실행은 다음과 같습니다.

// 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 이상은 다른 이름으로 비슷한 기능을 합니다.

  1. 지도선택 | Enumerable.Range(1, 10).Select(x => x + 2);.
  2. 감소집계 | Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);.

LINQ를 사용하여 위에서 설명한 MapReduce 프로그램을 구현할 수 있습니다.

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#에서의 MapReduce는 대량의 데이터를 처리하며, MapReduceHadoop과 같은 많은 프레임워크에서 이러한 기능을 구현합니다. LINQ를 사용하여 작성된 C#의 MapReduce 프로그램은 여러 스레드가 입력 데이터의 다양한 부분에 동시에 매핑되어 매핑 결과가 중앙 위치에 배치되고, Reduce가 작동하는 다른 스레드에서 추가 처리를 위해 사용될 수 있는 단일 컴퓨터에서 실행되는 프로세스를 보여줍니다.

C#에서 처음부터 MapReduce 함수 생성

관계형 데이터베이스로 작업하고 데이터 집계를 접할 때 GroupBy 절과 Min, MaxCount와 같은 표준 작업을 즉시 생각합니다. C#의 Mapreduce 기능은 많은 양의 정보를 가져와 더 작은 덩어리로 줄일 수 있는 데이터 집계의 한 형태입니다.

축소하기 전에 정보를 맞춤형 축소 프로세스를 위한 구조 설계로 변환(매핑)할 수 있습니다. 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#에서 기본 시스템은 MapReduce 기능의 실행 및 실행을 관리하며 실제 복잡성과 정교함은 직접 작성하여 피할 수 있습니다.

이 자습서에서는 MapReduce의 기본 개념과 이를 C#에서 만들고 사용하는 방법을 배웠습니다.

C#에서 LINQ를 사용하거나 사용하지 않고 MapReduce 기능은 매우 크고 복잡한 데이터 처리 작업의 빠른 소비에 대한 혁신적인 접근 방식을 제공합니다. C# 언어는 MapReduce 처리에 적합합니다.

MapReduce 기능을 사용하여 거의 모든 규모의 데이터 처리 작업을 수용할 수 있습니다.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

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

관련 문장 - Csharp Function