一种数据处理方法及其系统 【技术领域】
本发明涉及通信领域中的数据挖掘技术,尤其涉及一种数据处理方法及其系统。
背景技术
数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道但又是潜在有用的信息和知识的过程。
数据挖掘流程通常包括:数据预处理(ETL)、数据挖掘算法实现、结果展示三个主要步骤。通过ETL步骤,可对源数据进行预处理以得到待挖掘数据;通过数据挖掘算法实现步骤,可实现满足业务需要的数据挖掘算法得出分析结果;通过结果展示步骤,可将数据挖掘算法的处理结果展示给用户。
ETL(如抽取、转换、装载等处理)负责将分布的、异构数据源中的数据,如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。
现有技术中的用ETL对数据进行处理的方法是基于数据库技术对数据进行处理的,无法适用于海量数据挖掘的并行ETL操作。并且,现有ETL系统是将待处理数据全部导入内存中再进行处理,由于内存容量的限制,使得现有ETL无法满足处理海量数据的需求。
由于ETL占数据挖掘流程中60%的工作量,可见,解决ETL处理海量数据的问题来提高ETL操作的效率是海量数据挖掘的关键。
【发明内容】
本发明实施例提供一种数据处理方法及数据处理系统,以解决现有技术中数据挖掘流程中的预处理操作效率底的问题。
本发明实施例提供的数据处理方法,包括:
并行执行多个Map任务,其中,每个Map任务获取待处理数据中相应部分的数据,并对获取到的数据进行数据处理,得到所述待处理数据的局部处理结果;
执行Reduce任务,所述Reduce任务根据所有局部处理结果得到所述待处理数据的全局处理结果。
本发明实施例提供的数据处理系统,包括:
调用模块,用于调用多个并行的Map任务,以及在所述多个并行的Map任务执行完成后调用Reduce任务;
与所述调用模块调用的Map任务一一对应的Map任务执行模块,用于执行Map任务,包括:获取待处理数据中相应部分的数据,并对获取到的数据进行数据处理,得到所述待处理数据的局部处理结果;所述Map任务执行模块并行执行;
Reduce任务执行模块,用于执行Reduce任务,包括:根据所有局部处理结果得到所述待处理数据的全局处理结果。
本发明的上述实施例中,通过用多个Map任务对待处理数据的各部分进行处理,可实现数据处理过程的并行与分布式部署。由于Map任务可分布到多个执行节点(如PC机)上执行,因此可将该处理方式应用于集群环境。Map任务获取到数据后就进行数据处理,与现有技术中需要将数据全部读入内存相比,可避免内存容量的限制。可见,采用本发明实施例可提高数据处理的效率,特别是针对需要处理海量数据的数据挖掘流程中的数据预处理操作,可提高数据预处理的效率。
【附图说明】
图1为本发明实施例的数据挖掘预处理的流程示意图;
图2为本发明实施例通过Map任务和Reduce任务进行数据处理的示意图;
图3为本发明实施例的数据挖掘系统结构示意图。
【具体实施方式】
本发明实施例采用Map/Reduce(映射/简化)机制进行数据处理,如数据挖掘流程中的数据预处理操作。Map/Reduce是一种分布式处理海量数据的实现方式,该机制可让程序分步到一个由普通节点组成的超大集群上并发执行。
下面结合附图对本发明实施例进行详细描述。
参见图1,为本发明实施例中的数据挖掘预处理流程示意图,当启动数据预处理流程后,该流程包括:
步骤101、生成多个Map任务,每个Map任务负责处理待处理数据中的部分数据。
该步骤中,可通过调用Map函数的方式生成多个Map任务。Map函数可根据其中预设的参数生成多个Map任务并且为每个Map任务指定需要处理的数据。Map函数的参数可包括Map任务的数量、每个Map任务处理的数据量。由于待处理数据通常是以数据行方式组织的,因此,每个Map任务处理的数据量参数可以是行偏移量。Map函数的参数可通过本实施例提供的Map函数参数设置界面进行设置或修改,如,用户可根据待处理数据的数据量大小增加或减少Map任务数量,或者调整每个Map任务的行偏移量参数。Map函数还可根据预设的Map任务规则生成Map任务以及为每个Map任务指定需要处理的数据,Map任务规则可以包括:数据量与Map任务数量的对应关系,数据量越大则对应的Map任务数量越多;每个Map任务对应的数据行数,较佳地,可通过将每个Map任务对应的数据行数控制在一定范围内以使每个Map任务处理的数据量控制在一定范围内,如64MB,以保证Map任务的数据处理效率。
步骤102、各Map任务从待处理数据中读取各自处理的数据,并对读取到的数据进行数据处理,其中,各Map任务的数据读取操作是并行执行的。
该步骤中,每个Map任务根据其对应的数据偏移量定位到待处理数据中的相应数据行,并从该行开始逐行读取数据。Map任务可将读取到的数据转换成<key,value>对,其中,key为Map任务为读取到的数据行生成的行标识(如行号),至少在一个Map任务中,key值是唯一的,value为读取到的数据行的数据内容。然后,Map任务按照规定的数据处理操作对<key,value>对中的value进行数据处理,并可将各<key,value>对的处理结果转换成对应的新的<key,value>对,其中,key为处理后的数据,value为空。
步骤103、各Map任务处理完成后,由Reduce任务对各Map任务的处理结果进行合并,得到整个待处理数据的处理结果,并可进一步进行数据输出,如输出到分布式文件系统(DFS)存储。
该步骤中,可通过调用Reduce函数的方式生成一个或多个并行的Reduce任务,进行数据合并与输出。
图2给出了上述流程中通过Map任务和Reduce任务进行数据处理的示意图,其中,在Map过程201中,通过调用Map函数生成多个Map任务(图中以圆圈和字母M表示),每个Map任务读取输入数据(即待处理数据)中的部分数据(图中以方框表示),并对读取到的数据进行处理,其中各Map任务并行执行数据读取和数据处理的操作;该过程中,每个Map任务读取到一行数据就对该行数据进行处理,并将该行数据的处理结果进行输出。在Reduce过程202中,通过调用Reduce函数生成Reduce任务(图中以圆圈和字母R表示),通过该任务对各Map任务的处理结果进行合并以及输出。
上述流程中,各Map任务可分布到多个执行节点(如PC机)上执行,一个执行节点可执行一个或多个Map任务,较佳地,可由负载轻的执行节点执行多个Map任务。可以看出,通过用多个Map任务对待处理数据的不同部分进行处理,可实现数据处理过程的并行与分布式部署;通过将Map任务分布到多个执行节点上执行,可将该处理方式应用于集群环境;通过Map任务将数据读入一行即处理一行,不需要将数据全部读入内存,因而可对海量数据进行处理。可见,采用本发明实施例可提高数据处理的效率,特别是针对需要处理海量数据的数据挖掘流程中的数据预处理操作,提供了解决方案。
本发明实施例中的数据处理操作可以包括数据预处理操作中的缺值处理、字符串处理、区间化处理、属性操作处理、行内去重处理、归一化处理、离散处理、统计或数据抽样等,下面结合图2对本发明实施例中采用的各种数据预处理操作进行描述。
(1)缺值处理操作
由于待处理数据中的某些数据项往往存在缺值,即,某属性字段的数值缺失,因而影响数据挖掘算法对缺值项的识别与处理。缺值处理是针对待处理数据中的缺值项用指定数据值进行填充的过程。
本发明实施例提供的缺值处理流程可包括:
对输入数据的一个或多个属性字段名进行解析,定位出需要处理的属性字段(即关键字段)在数据中的列;
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务通过split(分割)方法对<key,value>对中的Value数据进行分隔,根据解析确定出的关键字段所在的列,判断该关键字段的值是否为空,若为空值,则用用户指定的值替换空值,否则保持原字段值不变。每处理完成一个<key,value>对,Map任务输出新的<key,value>对,其中,key为处理后的每行数据的文本形式,value为空;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,并输出到DFS存储。
(2)字符串替换操作
字符串替换是指针对指定的属性字段,将原字段值替换为目标字段值。
本发明实施例提供的字符串替换流程可包括:
对输入数据的一个或多个属性字段名进行解析,定位出需要处理的属性字段(即关键字段)在数据中的列;解析字符串替换表达式,将原字符串与目的字符串分别对应的存储于数组中;
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务通过split方法对<key,value>对中的Value数据进行分隔,根据解析确定出的关键字段所在的列以及存储原字符串和目的字符串的数组,判断该关键字段的值是否与原字符串相同,若相同,则用该原字符串对应的目的字符串替换该字段的值,否则保持该关键字段的值不变。每处理完成一个<key,value>对,Map任务输出新的<key,value>对,其中,key为处理后的每行数据的文本形式,value为空;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,并输出到DFS存储。
(3)区间化操作
区间化是指针对数值型数据,将其规约为某些区间。例如用户年龄字段,将数值型数据按照年龄段进行规约,0-9岁归为类0,10-19岁归为类1,20-29岁归为类2,依此类推,90岁以上归为类9。通过区间化操作将用户年龄字段的连续性数值数据映射为几个区间段。区间段个数可由用户指定。
本发明实施例提供的区间化处理流程可包括:
对输入数据的一个或多个属性字段名进行解析,定位出需要处理的属性字段(即关键字段)在数据中的列,并根据用户输入的参数确定区间化的映射关系;
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务通过split方法对<key,value>对中的Value数据进行分隔,根据解析确定出的关键字段所在的列,通过区间化映射关系将该关键字段的值替换为区间类别。每处理完成一个<key,value>对,Map任务输出新的<key,value>对,其中,key为处理后的每行数据的文本形式,value为空;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,并输出到DFS存储。
(4)属性操作
属性操作主要包括:属性删除,属性交换,通过对现有属性计算添加新属性等操作。
本发明实施例以添加新属性为例,给出其主要步骤:
利用堆栈对计算表达式进行解析;
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务通过split方法对<key,value>对中的Value数据进行分隔,按照解析后的计算表达式计算新属性的值,写在该行数据的最后一列。每处理完成一个<key,value>对,Map任务输出新的<key,value>对,其中,key为处理后的每行数据的文本形式,value为空;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,并输出到DFS存储。
(5)行内去重操作
行内去重操作是指针对所有数据样本中完全相同的两条或多条记录进行删除,只保留相同记录中的一条记录。
本发明实施例提供的行内去重流程可包括:
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务将读取数据行后生成的<key,value>对输出为新的<key,value>对,其中,key为原<key,value>对中的value值,value为空;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,并输出到DFS存储。可通过调用多个Reduce任务,每个Reduce任务分别从各Map任务输出的<key,value>对中查找具有相同key值的<key,value>,并对所有具有相同key值的<key,value>对只输出其中的一个<key,value>对。
(6)Zscore归一化操作
Zscore归一化是指将待处理数据通过公式X=(X′-均值)/方差,映射为均值为0,方差为1的一组标准化数据。
本发明实施例提供的归一化处理流程可包括:
对输入数据的一个或多个属性字段名进行解析,定位出需要处理的属性字段(即关键字段)在数据中的列;
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务通过split方法对<key,value>对中的Value数据进行分隔,根据解析确定出的关键字段所在的列,通过Zscore归一化公式计算归一化后的数据值,用新数据值替换该关键字段的值。每处理完成一个<key,value>对,Map任务输出新的<key,value>对,其中,key为处理后的每行数据的文本形式,value为空;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,并输出到DFS存储。
(7)离散化
离散化是将连续型的数据离散化为离散型数据。
本发明实施例提供的离散化处理流程可包括:
对输入数据的一个或多个属性字段名进行解析,定位出需要处理的属性字段(即关键字段)在数据中的列,并根据用户输入的参数确定区间化的映射关系,如,数值区间与离散数值的对应关系;
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务通过split方法对<key,value>对中的Value数据进行分隔,根据解析确定出的关键字段所在的列,通过离散化映射关系将该关键字段的数值型数据替换为离散化类别。每处理完成一个<key,value>对,Map任务输出新的<key,value>对,其中,key为处理后的每行数据的文本形式,value为空;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,并输出到DFS存储。
(8)统计
本发明实施例提供的数据统计流程可包括:
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务通过split方法对<key,value>对中的Value数据进行分隔得到各字段的值,对每个数值型字段统计出该Map任务所处理的所有<key,value>对中该列数据的最大值、最小值、总和或平方和等统计数据,并根据统计数据类型的个数相应输出相同数量的<key,value>对,其中,key标识出数据字段和对该数据字段的统计类别,如,0201、0202、0203、0204分别表示对第二列字段进行最大值、最小值、总和、平方和统计,value为统计结果。这样,如果有k个数值型的字段,相应有4k组<key,value>对;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并,得到全局的最大值、最小值,并可根据总和进行均值、方差的统计,并输出到DFS存储。
(9)数据抽样
本发明实施例提供的数据抽样流程可包括:
通过Map过程201调用Map函数生成多个Map任务,由于每个Map任务对输入数据中的一部分数据进行读取和处理,从而将输入数据进行分块处理。每个Map任务从输入数据逐行读取数据,并在读取一行数据后将读取到的数据行转换成<key,value>对,其中,key为Map任务生成的行偏移量,value为该行数据的文本形式。每个Map任务取一定百分比的<key,value>对进行处理(处理操作可如前所述的缺值处理、字符串替换等),并统计局部抽样个数。每个Map任务将统计结果输出为<key,value>对,其中,key为处理过后的每行文本,value为空文本;
通过Reduce过程202调用Reduce函数生成Reduce任务,Reduce任务将各Map任务输出的<key,value>对进行合并后输出到DFS存储,并统计全局抽样总数并可将其输出到相应输出数据文件的头文件中,以便得到数据采样率,即,全局抽样<key,value>对总数占全局<key,value>对总数的百分比。
上述数据抽样操作的流程中,Map任务取一定百分比的<key,value>对可以有多种实现方式,比如:生成随机数,根据该随机数生成百分比数值,按照该百分比数值取一定数量的<key,value>对;或者,根据数据分类的类别取Map任务读取的所有<key,value>对中某个或某些类别的<key,value>对;或者,在根据数据分类的类别取Map任务读取的所有<key,value>对中某个或某些类别的<key,value>对后,可进一步取其中的部分<key,value>对,如将选出的<key,value>对的数量再乘以该类别的<key,value>对占该Map任务读取到的所有<key,value>对的百分比。
基于相同的技术构思,本发明实施例还提供了一种数据挖掘预处理系统。
参见图3,为本发明实施例提供的数据挖掘系统的结构示意图。该系统包括调用模块31、多个Map任务执行模块32(图中只示出3个)和Reduce任务执行模块33,其中:
调用模块31,用于在数据处理流程启动时调用多个并行的Map任务,以及在这些多个并行的Map任务执行完成后调用Reduce任务;
Map任务执行模块32与调用模块31调用的Map任务一一对应,即,一个Map任务执行模块32执行一个Map任务,每个Map任务执行模块32执行Map任务的过程,包括:获取待处理数据的部分数据,并对获取到的数据进行数据处理,得到待处理数据的局部处理结果;并且,这些Map任务执行模块并行执行;
Reduce任务执行模块33,用于执行Reduce任务,包括:根据所有局部处理结果得到待处理数据的全局处理结果。
Map任务执行模块32读取到一行数据后,即对该行数据进行数据处理,并在处理完成后对该行数据的处理结果进行输出,直到读取完为其指定的所有数据行。Map任务执行模块32获取待处理数据的部分数据时,可根据为Map任务指定的数据行逐行读取待处理数据中相应行的数据。Map任务执行模块32可将读取到的数据行转换为<key,value>对,其中,key为Map任务为读取到的数据行生成的行标识,value为读取到的数据行内容;并将处理后的数据转换为新的<key,value>对输出,其中,key为处理后的数据行内容,value为空,或者,key标识出数据行中的字段以及对该字段的处理操作类型,value为相应的处理操作结果。
Map任务执行模块32还可以进一步对获取到的数据进行数据处理之前,根据随机数生成的百分比数值或者根据Map任务从读取到的数据行转换成的<key,value>对所属的分类类别,从该Map任务根据读取到的数据行转换成的所有<key,value>对中取出相应数量的<key,value>对;在对获取到的数据进行数据处理时,对取出的<key,value>对进行数据处理。这样,Reduce任务执行模块33可在根据所有局部处理结果得到待处理数据的全局处理结果后,统计所有Map任务取出的<key,value>对的总数量并输出。
Map任务执行模块32可以进行的数据处理操作如前所述,再此不再赘述。
Map任务执行模块32可将其处理结果暂存到分布式文件系统34,使Reduce任务执行模块33可从分布式文件系统34获取各Map任务的处理结果,Reduce任务执行模块33可将全局处理结果存储到分布式文件系统34。
上述系统中,调用的Reduce任务可以为多个,相应的,Reduce任务执行模块33也为多个,且Reduce任务执行模块33与Reduce任务一一对应。
综上所述,本发明实施例提供了并行ETL的处理技术,无需将所有数据都导入到内存中再进行处理,而是将数据读入一部分即处理一部分,可提高ETL所能处理数据量级,如由1GB提高到TB级,且通过增加节点数可处理更高数据量级。实现并行ETL处理,还可节省了ETL操作时间,提高数据处理效率,可达到线性加速比。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。