C 언어 빅 데이터 처리 실현

글 목록
  • 1. 소개
  • 2. 빅 데이터 처리 의 실현
  • 2.1 개의 파일 과 매크로
  • 2.2 수 쌍 의 구조 체 만 들 기
  • 2.3 랜 덤 으로 MIX 생 성NUM 개 숫자
  • 2.4 통계 hash 파일 에서 가장 많이 나 온 숫자
  • 2.5 통계 빅 데이터 중 가장 많이 나 온 숫자
  • 2.6 실현



  • 1. 소개
    본 고 는 hash 방법 을 사용 하여 하나의 빅 데이터 파일 을 여러 파일 로 분산 시 켜 처리 함으로써 파일 의 IO 작업 을 낮 추고 프로그램의 효율 을 높 였 다.
    2. 빅 데이터 처리 의 실현
    2.1 헤더 파일 과 매크로
    #include 
    #include 
    #include 
    
    #define MIX_NUM 100000//       
    #define ITEM_NUM 10000//         
    

    2.2 숫자 쌍 의 구조 체 만 들 기
    //          
    typedef struct Pair
    {
         
    	int num;//  
    	int times;//  
    }Pair;
    

    2.3 랜 덤 으로 MIX 생 성NUM 개수
    기 존의 빅 데이터 가 없 으 면 우 리 는 프로그램 에서 랜 덤 으로 빅 데 이 터 를 생 성하 여 아 날로 그 빅 데 이 터 를 처리 할 수 있다.
    //    MIX_NUM   
    void CreatFile_BigData(const char* path)
    {
         
    
    	FILE* fw = fopen(path,"wb");//       
    	assert(fw != nullptr);
    	int tmp;
    
    	for (int i = 0;i < MIX_NUM;i++)
    	{
         
    		tmp = rand();
    		fwrite(&tmp, sizeof(int), 1, fw);
    	}
    
    	fclose(fw);
    }
    

    2.4 hash 파일 에서 가장 많이 나타 난 숫자 통계
    //  hash            ,      ITEM_NUM
    Pair HashFile(const char* path)
    {
         
    	int* arr = (int*)calloc(ITEM_NUM, sizeof(int));
    	FILE* fr = fopen(path, "rb");
    	assert(fr != nullptr);
    	int tmp;
    
    	//           
    	while (fread(&tmp, sizeof(int), 1, fr) > 0)
    	{
         
    		arr[tmp / 4]++;
    	}
    
    	//           
    	Pair pa = {
          0 };
    	for (int i = 0;i < ITEM_NUM;i++)
    	{
         
    		if (pa.times < arr[i])
    		{
         
    			pa.num = i * 4 + tmp % 4;
    			pa.times = arr[i];
    		}
    	}
    
    	fclose(fr);
    	free(arr);
    	return pa;
    }
    

    2.5 통계 빅 데이터 중 가장 많이 나 온 숫자
    //            ,      ITEM_NUM
    Pair Maxtimes(const char* path)
    {
         
    	int* arr = (int*)calloc(ITEM_NUM, sizeof(int));
    	FILE* fr = fopen(path, "rb");
    	int tmp;
    	char patharr[4][20];
    	for (int i = 0;i < 4;i++)
    	{
         
    		sprintf(patharr[i], "%d.txt", i);
    	}
    
    	FILE* fw[4];
    	for (int i = 0;i < 4;i++)
    	{
         
    		fw[i] = fopen(patharr[i], "wb");
    	}
    
    	//           hash   ,         (  IO)
    	while (fread(&tmp, sizeof(int), 1, fr) > 0)
    	{
         
    		fwrite(&tmp, sizeof(int), 1, fw[tmp % 4]);
    	}
    
    	for (int i = 0;i < 4;i++)
    	{
         
    		fclose(fw[i]);
    	}
    
    	Pair paArr[4];
    	for (int i = 0;i < 4;i++)
    	{
         
    		paArr[i] = HashFile(patharr[i]);
    	}
    	int index = 0;//           
    	for (int i = 0;i < 4;i++)
    	{
         
    		if (paArr[index].times < paArr[i].times)
    		{
         
    			index = i;
    		}
    	}
    
    	return paArr[index];
    }
    

    2.6 실현
    int main()
    {
         
    	const char* path = "BigData.txt";
    	CreatFile_BigData(path);
    	Pair pa = Maxtimes(path);
    	printf("            =%d,  =%d", pa.num, pa.times);
    
    	return 0;
    }
    

    좋은 웹페이지 즐겨찾기