一种支付数据的预处理方法和装置与流程

文档序号:17860782发布日期:2019-06-11 22:51阅读:230来源:国知局
一种支付数据的预处理方法和装置与流程

本发明的实施例涉及数据处理领域,尤其涉及一种支付数据的预处理方法和装置。



背景技术:

随着计算机技术的快速发展,互联网金融快速崛起,各类支付数据正在呈指数级增长,如何利用这些数据快速、准确地挖掘有价值信息变得至关重要。原始数据存在不一致、重复、含噪声、维度高等问题。故在机器学习模型训练之前,需要完成原始数据预处理。

传统数据预处理方法为对表中存储的数据一列接着一列进行计算,当特征持续增加时,整体计算时间会迅速变长。此外,每次计算一次性加载全量数据,随着数据量越来越大,每一步计算效率越低,有性能瓶颈。现有技术,往往通过增加机器配置解决性能问题。总之,传统数据预处理方法并行工作能力差,影响数据预处理的效率。



技术实现要素:

本发明的实施例提供一种贷款客户信用评分方法和装置,能够提高并行工作能力,提高了数据预处理的效率。

第一方面,提供一种支付数据的预处理方法,包括:

在数据仓库中读取数据表,其中所述数据表中存储有支付数据,其中每条所述支付数据关联唯一的识别码;

根据所述数据表的元信息将所述数据表拆分为至少两个数据子表;

将所述至少两个数据子表存入非关系型数据库;

启动至少一个读取线程,在所述非关系型数据库中分别读取所述数据子表,其中每个读取线程对应一个数据子表;

启动至少一个预处理线程,对所述数据子表中的每列数据进行预处理,其中每个预处理线程对应处理所述数据子表中的一列数据。

可选的,所述在数据仓库中读取数据表之前,包括:在至少一个数据系统中获取原始支付数据,并存入所述数据仓库,对所述数据仓库中存储的所述原始支付数据按照唯一的识别码进行关联,生成所述数据表。

可选的,所述根据所述数据表的元信息将所述数据表拆分为至少两个数据子表,包括:

获取所述数据表的数据量以及所述数据仓库的集群资源,根据所述数据表的数据量以及所述数据仓库的集群资源确定拆分的数据子表数量;

根据所述数据表的元信息以及所述数据子表数量将所述数据表拆分为至少两个数据子表。

可选的,所述对所述数据子表中的一列数据进行预处理,包括:

将所述数据子表中的一列数据转换为分布式弹性数据集rdd;

对所述分布式弹性数据集rdd进行如下一项或多项处理:数据清洗、空缺值填充、数据向量化以及数据特征约减。

可选的,所述对所述数据子表中的一列数据进行预处理后,将每个数据子表对应的所述预处理线程预处理完毕的数据存入所述数据仓库。

第二方面,提供一种支付数据的预处理装置,包括:

输入模块,用于在数据仓库中读取数据表,其中所述数据表中存储有支付数据,其中每条所述支付数据关联唯一的识别码;

数据拆分模块,用于根据所述输入模块读取的所述数据表的元信息将所述数据表拆分为至少两个数据子表;

存储模块,用于将所述数据拆分模块拆分的所述至少两个数据子表存入非关系型数据库;

处理模块,用于启动至少一个读取线程,在所述非关系型数据库中分别读取所述数据子表,其中每个读取线程对应一个数据子表;启动至少一个预处理线程,对所述数据子表中的每列数据进行预处理,其中每个预处理线程对应处理所述数据子表中的一列数据。

可选的,所述输入模块,还用于在至少一个数据系统中获取原始支付数据,并存入所述数据仓库,对所述数据仓库中存储的所述原始支付数据按照唯一的识别码进行关联,生成所述数据表。

可选的,所述数据拆分模块具体用于获取所述数据表的数据量以及所述数据仓库的集群资源,根据所述数据表的数据量以及所述数据仓库的集群资源确定拆分的数据子表数量;根据所述数据表的元信息以及所述数据子表数量将所述数据表拆分为至少两个数据子表。

可选的,所述处理模块具体用于将所述数据子表中的一列数据转换为分布式弹性数据集rdd;对所述分布式弹性数据集rdd进行如下一项或多项处理:数据清洗、空缺值填充、数据向量化以及数据特征约减。

可选的,所述处理模块还用于将每个数据子表对应的所述预处理线程预处理完毕的数据存入所述数据仓库。

第三方面,提供一种存储一个或多个程序的计算机可读存储介质,所述一个或多个程序包括指令,所述指令当被计算机执行时使所述计算机执行上述任一项所述的支付数据的预处理方法。

在上述方案中,在数据仓库中读取数据表,其中所述数据表中存储有支付数据,其中每条所述支付数据关联唯一的识别码;根据所述数据表的元信息将所述数据表拆分为至少两个数据子表;将所述至少两个数据子表存入非关系型数据库;启动至少一个读取线程,在所述非关系型数据库中分别读取所述数据子表,其中每个读取线程对应一个数据子表;对任一所述数据子表,启动至少一个预处理线程,对所述数据子表中的一列数据进行预处理,其中每个预处理线程对应所述数据子表中的一列数据。其中通过并行的读取线程读取所有数据子表,并通过并行的预处理线程对每个子表中的每一列数据分别进行预处理,相当于进行了两级多线程的并行处理,相较于传统的数据预处理方法,提高了并行工作能力,提高了数据预处理的效率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供一种支付数据的预处理方法流程示意图;

图2为本发明实施例提供的一种支付数据的预处理装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的实施例应用到如下技术术语:

spark平台,apachespark是一种分布式计算框架,基于内存计算和并行计算,支持对数据集的多种操作,如:map,filter,flatmap,reducebykey等,这些操作统称为算子。

redis,redis是一个开源的高性能的非关系型数据库,它可以作为数据库,缓存和消息中间件,它支持多种类型的数据结构,redis性能极高,读写速度极快。

分布式弹性数据集(rdd),rdd是spark中的核心概念,叫弹性分布式数据集。首先,它是数据集,以hdfs上的数据文件为例,它在逻辑上抽象地代表了一个hdfs文件。其次,它实际上是被分区得,它被分为多个分区。多个分区散落在spark集群中,不同的节点上。通常一个hdfs文件被分成多少个block,则对应rdd就会有多少个分区,这个分区数也是默认的最大并发度。这也是它叫分布式的缘由。

数据框(dataframe),dataframe与rdd相同之处,都是不可变分布式弹性数据集。不同之处在于,dataframe的数据集都是按指定列存储,即结构化数据。类似于传统数据库中的表。dataframe的设计是为了让大数据处理起来更容易。dataframe允许开发者把结构化数据集导入dataframe,并做了higher-level的抽象;dataframe提供特定领域的语言api来操作你的数据集。

惰性加载(lazyload),spark支持两种rdd操作:transformation和action。transformation操作会针对已有的rdd创建一个新的rdd;而action则主要是对rdd进行最后的操作。ransformation的特点就是lazy特性。lazy特性指的是,如果一个spark应用中只定义了transformation操作,那么即使你执行该应用,这些操作也不会执行。也就是说,transformation是不会触发spark程序的执行的,它们只是记录了对rdd所做的操作,但是不会自发的执行。只有当transformation之后,接着执行了一个action操作,那么所有的transformation才会执行。spark通过这种lazy特性,来进行底层的spark应用执行的优化,避免产生过多中间结果。action操作执行,会触发一个sparkjob的运行,从而触发这个action之前所有的transformation的执行,这就是action的特性。

数据预处理,海量的原始数据中存在着大量不完整、不一致、有异常的数据,严重影响到建模的执行效率,甚至可能导致结果的偏差,所以进行数据清洗就显得尤为重要,数据清洗完成后接着进行或者同时进行数据集成、变换、规约等一系列的处理,该过程就是数据预处理。

参照图1所示,本发明的实施例提供一种支付数据的预处理方法,包括如下步骤:

101、在数据仓库中读取数据表,其中数据表中存储有支付数据,其中每条支付数据关联唯一的识别码。

其中在步骤101之前还包括:所述在数据仓库中读取数据表之前,包括:在至少一个数据系统中获取原始支付数据,并存入所述数据仓库,对所述数据仓库中存储的原始支付数据按照唯一的识别码进行关联,生成所述数据表。其中数据仓库可以采用hive,在步骤101之前需要在至少一个数据系统完成支付数据的采集和拼接,具体的,可以是将各数据系统相关的原始支付数据进行采集,存入hive,使用hive-sql对原始支付数据进行加工、清洗,按照唯一的识别码(例如:主键)进行关联,得到最终需要进行预处理的数据表。

102、根据数据表的元信息将数据表拆分为至少两个数据子表。

步骤102具体为:获取数据表的数据量以及数据仓库hive的集群资源,根据数据表的数据量以及数据仓库的集群资源确定拆分的数据子表数量;根据数据表的元信息以及数据子表数量将数据表拆分为至少两个数据子表。具体为,计算数据表被拆分后数据子表的元信息,即:当前数据子表隶属于哪张表,包括哪些字段。通过redis的hash数据结构对数据子表元信息进行缓存,其结构为<数据表名,{x,"字段1,字段2,字段n"}>,其中x代表第x张数据子表。

103、将至少两个数据子表存入非关系型数据库。

其中,非关系型数据库可以为redis,例如可以将数据子表存入redis,并利用hash数据结构对数据子表的原信息进行读写。

104、启动至少一个读取线程,在非关系型数据库中分别读取数据子表,其中每个读取线程对应一个数据子表。

例如,启动多个数据子表读取线程(即第一级线程),并发的通过spark-sql加载各子表数据到dataframe。这种先对数据表进行虚拟拆分,再并发地执行物理加载的方式,一方面可以通过提高资源利用率减少计算时间;另一方面可以避免对单张大数据表的操作;此外首先将各个数据系统的原始支付数据汇聚到数据表中,避免数据过多时在多个数据系统之间进行迁移,降低网络开销,避免spark惰性加载造成的数据加载延迟,使性能得到优化。

105、启动至少一个预处理线程,对数据子表中的每列数据进行预处理,其中每个预处理线程对应处理数据子表中的一列数据。

具体的步骤105包括:将数据子表中的一列数据转换为分布式弹性数据集rdd;对分布式弹性数据集rdd进行如下一项或多项处理:数据清洗、空缺值填充、数据向量化以及数据特征约减。其中,可以通过构建数据清洗算子实现数据清洗,例如:采用t%分布法对一列数据进行数据清洗,以清洗异常值,例如将按照t%分布法统计的样本分布规律中上下分位点之间的样本保留,将上下分位点之外的样本清除,或者前5%和后5%的数据利用中位数替换等;可以通过构建空缺值填充算子采用均值或者中位数空缺值填充法对一列数据进行空缺值填充;可以通过构建数据向量化算子对一列数据进行向量化,例如:可以采用特征区间比率法、连续特征十等分、woe法对一列数据数据向量化处理。可以通过构建信息增益ig算子对一列数据数据进行数据特征约减。其中对应步骤104中各数据子表的读取线程(第一级线程)下,再启动多个预处理线程(第二级线程),并发地按照步骤105完成数据子表的特征列数据的预处理。其中,各预处理线程会阻塞式地等待一个预处理算子执行完毕再进入下一算子的计算。其中,转化特征列数据为rdd并加载到内存,构建算子完成数据预处理各步骤计算,中间结果就在内存,降低磁盘读写损耗。

最后,对数据子表中的一列数据进行预处理后,将每个数据子表对应的预处理线程预处理完毕的数据存入数据仓库。第一级线程阻塞地等待各数据子表的第二级线程完成各数据子表的数据预处理,最终汇总结果并存入hive。

在上述方案中,在数据仓库中读取数据表,其中所述数据表中存储有支付数据,其中每条所述支付数据关联唯一的识别码;根据所述数据表的元信息将所述数据表拆分为至少两个数据子表;将所述至少两个数据子表存入非关系型数据库;启动至少一个读取线程,在所述非关系型数据库中分别读取所述数据子表,其中每个读取线程对应一个数据子表;对任一所述数据子表,启动至少一个预处理线程,对所述数据子表中的一列数据进行预处理,其中每个预处理线程对应所述数据子表中的一列数据。其中通过并行的读取线程读取所有数据子表,并通过并行的预处理线程对每个子表中的每一列数据分别进行预处理,相当于进行了两级多线程的并行处理,相较于传统的数据预处理方法,提高了并行工作能力,提高了数据预处理的效率。

参照图2所示,一种支付数据的预处理装置,包括:

输入模块21,用于在数据仓库中读取数据表,其中所述数据表中存储有支付数据,其中每条所述支付数据关联唯一的识别码;

数据拆分模块22,用于根据所述输入模块读取的所述数据表的元信息将所述数据表拆分为至少两个数据子表;

存储模块23,用于将所述数据拆分模块拆分的所述至少两个数据子表存入非关系型数据库;

处理模块24,用于启动至少一个读取线程,在所述非关系型数据库中分别读取所述数据子表,其中每个读取线程对应一个数据子表;启动至少一个预处理线程,对所述数据子表中的每列数据进行预处理,其中每个预处理线程对应处理所述数据子表中的一列数据。

在一种示例性的方案中,所述输入模块21,还用于在至少一个数据系统中获取原始支付数据,并存入所述数据仓库,对所述数据仓库中存储的所述原始支付数据按照唯一的识别码进行关联,生成所述数据表。

在一种示例性的方案中,所述数据拆分模块22具体用于获取所述数据表的数据量以及所述数据仓库的集群资源,根据所述数据表的数据量以及所述数据仓库的集群资源确定拆分的数据子表数量;根据所述数据表的元信息以及所述数据子表数量将所述数据表拆分为至少两个数据子表。

在一种示例性的方案中,所述处理模块24具体用于将所述数据子表中的一列数据转换为分布式弹性数据集rdd;对所述分布式弹性数据集rdd进行如下一项或多项处理:数据清洗、空缺值填充、数据向量化以及数据特征约减。

在一种示例性的方案中,所述处理模块23还用于将每个数据子表对应的所述预处理线程预处理完毕的数据存入所述数据仓库。

需要说明的是,输入模块21、数据拆分模块22、处理模块24,可以为单独设立的处理器,也可以集成在控制器的某一个处理器中实现,此外,也可以以程序代码的形式存储于控制器的存储器中,由控制器的某一个处理器调用并执行以上各单元的功能。这里所述的处理器可以是一个中央处理器(centralprocessingunit,cpu),或者是特定集成电路(applicationspecificintegratedcircuit,asic),或者是被配置成实施本申请实施例的一个或多个集成电路。存储模块23可以为内存。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

此外,还提供一种计算可读媒体(或介质),包括在被执行时进行上述实施例中的方法的操作的计算机可读指令。

另外,还提供一种计算机程序产品,包括上述计算机可读媒体(或介质)。

应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(英文全称:read-onlymemory,英文简称:rom)、随机存取存储器(英文全称:randomaccessmemory,英文简称:ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1