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;
}

你可能感兴趣的:(C语言,数据结构,c语言,大数据)