CN109101575A - 计算方法及装置 - Google Patents
计算方法及装置 Download PDFInfo
- Publication number
- CN109101575A CN109101575A CN201810792110.4A CN201810792110A CN109101575A CN 109101575 A CN109101575 A CN 109101575A CN 201810792110 A CN201810792110 A CN 201810792110A CN 109101575 A CN109101575 A CN 109101575A
- Authority
- CN
- China
- Prior art keywords
- node
- data
- rdd
- field
- data processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及大数据技术领域,提供一种计算方法及装置。该方法包括:读取并解析配置文件,配置文件的内容包括多个节点以及连接多个节点的至少一条边,其中,每个节点用于表示业务流程中的一个数据处理单元,每条边用于表示两个节点之间的数据流向;创建多个节点,并基于多个节点以及至少一条边构建用于表示业务流程的有向无环图,其中,每个节点以及每个节点对应的数据处理操作均定义在预先生成的程序包中;按照有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。在针对不同的业务需求开发计算程序时,只需要修改配置文件,对于程序包中的代码则无需进行更改,显著提高了开发效率。
Description
技术领域
本发明涉大数据技术领域,具体而言,涉及一种计算方法及装置。
背景技术
随着大数据技术的发展以及移动互联网的快速普及,收集到的数据剧烈增加,对数据的处理速度提出更高要求。目前技术较为先进的有Hadoop和Spark等离线计算框架。如果对速度要求比较高,则更多的选择Spark。
当前情况是,业界存在很多由Hadoop到Spark的过渡阶段,大量企业仍然采用Hive进行ETL(Extract-Transform-Load)。Hive的底层是利用Hadoop的MapReduce来实现类SQL操作,性能受到限制,而Spark有效地结合了Hive,采用Hive的元数据,结合弹性分布式数据集(Resilient Distributed Datasets,RDD)操作,利用类SQL实现了快速计算。
现有技术中,使用Spark进行计算的通常是根据特定业务编写代码,打成jar包,再放到Spark集群里去运行。这种模式要求业务是不变的,如果业务发生改变,就必须修改代码,再打成jar包。这对于一个业务架构是固定,但具体内容不固定的任务,过于繁琐,无法满足一次编写,多次使用的原则。而在现实工作中,需求随时会发生变化,对性能的要求较高,每次修改代码的方法已经远远不能满足需求。
发明内容
有鉴于此,本发明实施例提供一种计算方法及装置,以解决上述技术问题。
为实现上述目的,本发明提供如下技术方案:
第一方面,本发明实施例提供一种计算方法,包括:
读取并解析配置文件,配置文件的内容包括多个节点以及连接多个节点的至少一条边,其中,每个节点用于表示业务流程中的一个数据处理单元,每条边用于表示两个节点之间的数据流向;
创建多个节点,并基于多个节点以及至少一条边构建用于表示业务流程的有向无环图,其中,每个节点以及每个节点对应的数据处理操作均定义在预先生成的程序包中;
按照有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。
在第一方面的一种可能的实现方式中,多个节点包括数据源节点以及动作节点;
数据源节点用于基于配置文件中指定的数据源参数从数据源读取并输出数据,动作节点用于基于配置文件中指定的动作参数对数据进行运算处理。
在第一方面的一种可能的实现方式中,按照有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕,包括:
执行每个数据源节点对应的数据处理操作,并在执行完毕后将每个数据源节点的执行状态标记为执行完毕;
选择一个可执行动作节点,可执行动作节点为尚未执行对应的数据处理操作的,且自身的前驱节点的执行状态均被标记为执行完毕的动作节点;
执行可执行动作节点对应的数据处理操作,并在执行完毕后将可执行动作节点的执行状态标记为执行完毕;
重复执行“选择一个可执行动作节点”至“在执行完毕后将可执行动作节点的执行状态标记为执行完毕”的步骤,直至每个动作节点对应的数据处理操作均执行完毕。
在第一方面的一种可能的实现方式中,选择一个可执行动作节点,包括:
在尚未执行对应的数据处理操作的动作节点中包括多个可执行动作节点时,从中随机选择一个可执行动作节点,可执行动作节点的选择不影响业务流程的最终执行结果。
在第一方面的一种可能的实现方式中,在选择一个可执行动作节点之前,方法还包括:
将每个动作节点的标识以及每个动作节点的前驱节点构成的键值对保存至第一哈希表。
在第一方面的一种可能的实现方式中,计算方法应用于Spark程序中,数据在传输以及处理过程中被封装为弹性分布式数据集RDD的形式。
在第一方面的一种可能的实现方式中,计算方法还包括:
将每个节点的标识以及每个节点输出的数据构成的键值对保存至第二哈希表;
将每个节点的标识以及每个节点的元数据构成的键值对保存至第三哈希表,其中,任一节点的元数据为以字段以及字段在该节点的输出数据中的索引为键值对的哈希表。
在第一方面的一种可能的实现方式中,数据源包括Hive表格和/或HDFS文件。
在第一方面的一种可能的实现方式中,动作节点包括条件过滤节点、时空过滤节点、频次统计节点、字段过滤节点、字段拼接节点、交集节点、并集节点、差集节点以及保存节点中的至少一种节点;
条件过滤节点用于基于指定的条件对输入源中指定的字段进行过滤,并输出处理后的数据;
时空过滤节点用于基于指定的条件以对输入源中的时间字段和/或地点字段进行过滤,并输出处理后的数据;
频次统计节点用于统计输入源中指定的字段的值均相同的内容的数量,并输出处理后的数据;
字段过滤节点用于过滤出输入源中指定的字段,并输出处理后的数据;
字段拼接节点用于以多个输入源中每个输入源指定的字段为连接键,对多个输入源进行左外连接,并输出处理后的数据;
交集节点用于以多个输入源中每个输入源指定的字段为连接键,对多个输入源进行内连接,并输出处理后的数据;
并集节点用于合并多个输入源的内容,并输出处理后的数据;
差集节点用于从第一个输入源中删除掉含有与第二个输入源中指定的字段的值相同的内容,并输出处理后的数据;
保存节点用于将输入源保存为Hive表格或HDFS文件;
其中,输入源为动作节点的前驱节点执行完毕后输出的数据。
第二方面,本发明实施例提供一种计算装置,包括:
读取模块,用于读取并解析配置文件,配置文件的内容包括多个节点以及连接多个节点的至少一条边,其中,每个节点用于表示业务流程中的一个数据处理单元,每条边用于表示两个节点之间的数据流向;
构建模块,用于创建多个节点,并基于多个节点以及至少一条边构建用于表示业务流程的有向无环图,其中,每个节点以及每个节点对应的数据处理操作均定义在预先生成的程序包中;
执行模块,用于按照有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。
第三方面,本发明实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种可能的实现方式提供的方法的步骤。该计算机存储介质可以实现为,但不限于图1示出的存储器102。
第四方面,本发明实施例提供一种电子设备,包括存储器以及处理器,存储器中存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种可能的实现方式提供的方法的步骤。该电子设备可以实现为,但不限于图1示出的电子设备100。
本发明的技术方案至少包括如下有益效果:本发明实施例提供的计算方法及装置,首先读取并解析配置文件,配置文件的内容包括多个节点以及连接多个节点的至少一条边。然后基于预先生成的程序包中对节点以及节点对应的数据处理操作的定义创建多个节点,并基于多个节点以及至少一条边构建用于表示业务流程的有向无环图。最后按照有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。
从而,针对不同的业务需求,只需要修改配置文件,重新配置节点以及边之间的组合关系即可,配置过程灵活方便,对于程序包中的代码则无需进行更改,实现了代码的一次编写,多次使用的原则,同时显著提高了针对不同业务的计算程序的开发效率,减轻了程序开发人员的工作负担。该方法可以应用于Spark程序中,但并不限于在Spark程序中应用。
为使本发明的上述目的、技术方案和有益效果能更明显易懂,下文特举实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了一种可应用于本发明实施例中的电子设备的结构框图;
图2示出了本发明第一实施例提供的计算方法的流程图;
图3示出了本发明第一实施例提供的有向无环图;
图4示出了本发明第二实施例提供的student表格的内容示意图;
图5示出了本发明第二实施例提供的score表格的内容示意图;
图6示出了本发明第二实施例提供的有向无环图;
图7示出了本发明第二实施例提供的student表格对应的rdd的示意图;
图8示出了本发明第二实施例提供的业务流程中的每个节点输出的rdd以及metaMap的示意图;
图9示出了本发明第三实施例提供的计算装置的功能模块图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
图1示出了本发明实施例提供的电子设备的结构示意图。参照图1,电子设备100包括存储器102、存储控制器104,一个或多个(图中仅示出一个)处理器106、外设接口108、射频模块110、音频模块112、显示模块114等。这些组件通过一条或多条通讯总线/信号线116相互通讯。
存储器102可用于存储软件程序以及模块,如本发明实施例中的计算方法及装置对应的程序指令/模块,处理器106通过运行存储在存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理,如本发明实施例提供的计算方法及装置。
存储器102可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。处理器106以及其他可能的组件对存储器102的访问可在存储控制器104的控制下进行。
处理器106可以是一种集成电路芯片,具有信号的处理能力。具体可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、微控制单元(Micro ControllerUnit,MCU)、网络处理器(Network Processor,NP)或者其他常规处理器;还可以是专用处理器,包括数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、现场可编程门阵列(Field Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。
外设接口108将各种输入/输出装置耦合至处理器106以及存储器102。在一些实施例中,外设接口108,处理器106以及存储控制器104可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
射频模块110用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。
音频模块112向用户提供音频接口,其可包括一个或多个麦克风、一个或者多个扬声器以及音频电路。
显示模块114在电子设备100与用户之间提供一个显示界面。具体地,显示模块114向用户显示视频输出,这些视频输出的内容可包括文字、图形、视频及其任意组合。
可以理解,图1所示的结构仅为示意,电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。于本发明实施例中,电子设备100可以是服务器、个人计算机、智能移动设备、智能穿戴设备以及智能车载设备等具有运算处理能力的设备,也可以不限于物理设备,例如还可以是虚拟机,虚拟服务器等。
第一实施例
图2示出了本发明第一实施例提供的计算方法的流程图。该计算方法可以应用于,但不限于应用于Spark程序中。下文在阐述时均以该方法应用于Spark程序中的情况为例进行阐述,但并不构成对本发明保护范围的限制。参照图1,计算方法包括:
步骤S10:电子设备的处理器读取并解析配置文件。
配置文件针对业务需求进行配置,这里所称的业务需求通常是一项数据处理任务。
在Spark程序中,SparkContext初始化完毕后,使用shell命令传入配置文件在HDFS上的储存位置,使用IO读取配置文件,并根据配置文件的格式对其内容进行解析,其中,配置文件可以为,但不限于json等格式。
配置文件的内容包括多个节点以及连接多个节点的至少一条边,其中,每个节点表示业务流程中的一个数据处理单元,每条边表示两个节点之间的数据流向,对于每个节点而言,配置文件中还定义了该节点要完成对应的数据处理操作所要使用的参数。
在实际实施中,配置文件可以手工编写,也可以通过可视化方式自动生成,例如,在可视化编辑界面中,用户只需要绘制节点并将节点连接,配置文件即可根据用户的绘制结果自动生成。
步骤S11:电子设备的处理器创建多个节点,并基于多个节点以及至少一条边构建用于表示业务流程的有向无环图。
在步骤S10执行之前,首先在程序源文件中对节点以及节点对应的数据处理操作进行定义,然后将源文件打成程序包以便在本发明实施例提供的方法中使用。在Spark程序中,源文件采用java开发,因此程序包为jar包。
在步骤S11中,根据程序包中的定义即可创建出多个节点,需要指出,步骤S11中所称的创建节点是指创建节点对应的对象。在第一实施例的一种实施方式中,节点至少包括两类,一类是数据源节点,一类是动作节点。
数据源节点用于基于配置文件中指定的数据源参数从数据源读取并输出数据。数据源参数可以包括,但不限于数据源类型、数据路径或表名、字段、字段类型等参数。其中,对于Spark程序而言,数据源类型一般可以包括Hive表格以及HDFS文件两种类型,分别对应不同的数据源。
动作节点用于基于配置文件中指定的动作参数对数据进行运算处理。动作参数可以包括,但不限于动作类型,参与运算的字段,字段满足的约束条件等参数。其中,根据动作类型的不同,动作节点至少可以包括条件过滤节点、时空过滤节点、频次统计节点、字段过滤节点、字段拼接节点、交集节点、并集节点、差集节点以及保存节点等类型,关于不同类型的动作节点,在后文中再具体阐述其对应的数据处理操作。
根据配置文件中的边,可以判断每个节点的入度和出度,入度为0的即为数据源节点,入度大于0的即为动作节点。数据源节点的数量可以为一个或多个,动作节点的数量也可以为一个或多个。同时,基于节点和边的信息,可以构建出包含节点和边的有向无环图,该有向无环图表示整个业务流程。图3示出了本发明第一实施例提供的有向无环图,参照图3,图3共包括3个数据源节点,其中DataNode1和DataNode3的数据源类型为Hive表格,DataNode2的数据源类型为HDFS文件。图3还包括8个动作节点,涵盖了除时空过滤节点之外的动作节点类型。各节点之间带箭头的连接线表示数据的流向。可以理解,图3仅为示例,图3示出的有向无环图的结构仅仅是针对某个具体业务而言的,并不构成对本发明保护范围的限制。
步骤S12:电子设备的处理器按照有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。
首先介绍执行步骤S12中可能会用到的三个全局的哈希表。
第一哈希表preMap为HashMap[String,ListBuffer[String]]类型,preMap的key为每个动作节点的标识(id),value为每个动作节点的前驱节点构成的ListBuffer。通过preMap可以快速访问每个动作节点的前驱节点。preMap可以在开始执行动作节点对应的数据处理操作之前构造好。
在Spark中,数据被封装为RDD的形式,每个节点输出的rdd(表示一个具体的RDD对象)均为RDD[String]的形式。因此如果要对rdd进行细化的操作,需要知道如何再次切分rdd中的每一行。元数据可以做到这点,为每个rdd建立一个元数据,用HashMap[String,Int]类型的变量metaMap表示,其中key为字段名称,value为字段在rdd中每一行的位置(索引)。按顺序解析rdd中的字段,从0开始编号,将字段名称和编号保存至metaMap。
第二哈希表resutRddMap为HashMap[String,RDD[String]]类型,resutRddMap的key为每个节点的标识,value为每个节点输出的rdd。
第三哈希表resutRddMetaMap为HashMap[String,HashMap[String,Int]]类型,resutRddMetaMap为每个节点的标识,value为每个节点输出的rdd的元数据。
通过resutRddMap以及resutRddMetaMap可以访问节点输出的rdd并对rdd进行操作,resutRddMap以及resutRddMetaMap可以在每个节点的数据处理操作完成后进行更新。
在第一实施例的一种实施方式中,步骤S12具体可以包括如下步骤:
A.执行每个数据源节点对应的数据处理操作,并在执行完毕后将每个数据源节点的执行状态标记为执行完毕。
数据源节点所要执行的数据处理操作主要是从数据源中读取数据的操作。在Spark程序中,使用sparkSQL进行数据读取。
具体地,如果数据源类型是Hive表格,可以直接使用Spark中的Hive上下文变量HiveContext.sql函数执行SQL语句进行读取。将读取得到的DataFrame转化为RDD[Row]类型的rdd(小写的rdd表示一个具体的RDD对象),其中,每个row代表Hive表格的一行,可以通过get(index)获取每个字段的值,对rdd进行map遍历,每一行替换为所有字段拼接成的一个字符串,字段与字段之间采用转义字符“\001”拼接,这样就将Hive表格转换成了RDD[String]类型的rdd。
如果数据源类型是HDFS文件,可以使用sparkContext.textFile(URL)函数读取HDFS文件,若HDFS文件中的每一行的字段间不是由“\001”分割,再将原来的分隔符替换为“\001”,读取HDFS文件的结果仍然是一个RDD[String]类型的rdd。
在数据源节点完成数据的读取后,将作为输出的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将其执行状态标记为执行完毕。
每个数据源节点的处理方式都是相同的,数据源节点处理完毕后,开始进行动作节点的处理,包括步骤B至步骤D。
B.选择一个可执行动作节点。
可执行动作节点定义为尚未执行对应的数据处理操作的,且自身的前驱节点的执行状态均被标记为执行完毕的动作节点。由于数据源节点的执行状态已经被标记为执行完毕,因此仅与数据源节点连接的动作节点必然可以作为可执行动作节点。
有时,在尚未执行对应的数据处理操作的动作节点中包括多个可执行动作节点,可以随机选择或者按某种预定规则(例如,选择编号较小的)选择其中的一个可执行动作节点进行执行,可执行动作节点的选择结果并不影响有向无环图最终的执行结果。或者,在某些实施方式中,多个可执行动作节点对应的数据处理操作也可以并发执行。
其中,动作节点的前驱节点可以通过preMap进行访问。
C.执行可执行动作节点对应的数据处理操作,并在执行完毕后将可执行动作节点的执行状态标记为执行完毕。
动作节点的数据处理操作是在程序包中定义好的,结合配置文件中配置好的动作参数即可实现可执行动作节点中的数据处理操作。每个动作节点的输入数据都是其前驱节点执行完毕后输出的数据,将其称为输入源。通过访问resutRddMap和resutRddMetaMap可以获得作为输入源的rdd以及其元数据,然后由动作节点对其进行处理,执行完毕后将作为输出的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将其执行状态标记为执行完毕。
在具体实施时,可以创建一个ActionRunner对象,并将动作节点作为其构造参数传入,通过运行ActionRunner,执行动作节点对应的数据处理操作。
D.重复执行步骤A至步骤C,直至每个动作节点对应的数据处理操作均执行完毕。
注意由于在步骤C中对动作节点的执行状态做了执行完毕的标记,因此再次执行步骤A时,标记过的动作节点将被排除在尚未执行对应的数据处理操作的动作节点之外,同时在判断某个动作节点的前驱节点对应的数据处理操作是否执行完毕时,也会用到节点执行状态。
下面结合图3,具体介绍每种动作节点:
在3个数据源节点执行完毕后,所有前驱节点均执行完毕的动作节点只有ActionNode1和ActionNode3。从这两个动作节点中随机选择一个开始运行,假设ActionNode1首先运行。ActionNode1为条件过滤节点,条件过滤节点用于基于指定的条件对输入源中指定的字段进行过滤,并输出处理后的数据,其功能类似于SQL中的where条件过滤。
具体而言,ActionNode1对应的数据处理操作包括如下步骤:
(1)获取前驱节点输出的rdd和元数据,即DataNode1的rdd和元数据。
(2)遍历ActionNode1中指定的字段(配置文件中指定),解析出每个字段对应的过滤条件,其中,过滤条件分为以下几种:
大于(bigger):主要是针对于数字类型的字段或者格式统一的字符换进行大小比较。
小于(smaller):主要是针对于数字类型的字段或者格式统一的字符换进行大小比较。
等于(equal):主要是针对于数字类型的字段或者格式统一的字符换进行大小比较。
包含(contain):主要是针对字符串类型字段的模糊匹配。
之间(between):主要是针对于数字类型的字段或者格式统一的字符换进行连续范围匹配。
其一(in):主要进行离散范围匹配。
(3)对每个指定的字段,使用rdd的filter方法过滤,得到满足该条件的rdd,临时结果rdd作为下个指定的字段的输入。当指定的字段不为第一个时,均采用上一个指定的字段的临时结果rdd作为输入,使用filter方法进行过滤。当遍历完成之后,得到的rdd即为满足所有字段过滤条件的rdd。
(4)若还有其他操作,比如进行类似SQL中的limit操作,可以使用rdd的take方法,然后使用sc.makeRDD()方法将结果转化为rdd。
(5)至此,ActionNode1对应的数据处理操作执行完毕,因为条件过滤没有改变rdd中的字段个数和顺序,只是筛选掉了不满足过滤条件的行,所以ActionNode1的元数据和DataNode1是一样的。将最终的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将ActionNode1的执行状态标记为执行完毕。
时空过滤节点用于基于指定的条件以对输入源中的时间字段和/或地点字段进行过滤,并输出处理后的数据。时空过滤节点可以看作是条件过滤节点的一种特殊情况,在此处不再具体阐述。
所有前驱节点执行完毕的动作节点只有ActionNode2和ActionNode3。从这两个动作节点中随机选择一个开始运行,假设ActionNode2首先运行。ActionNode2为频次统计节点,用于统计输入源中指定的字段的值均相同的内容的数量,并输出处理后的数据,其功能类似于SQL中的先where条件过滤再count计数。
具体而言,ActionNode2对应的数据处理操作包括如下步骤:
(1)获取前驱节点输出的rdd和元数据,即ActionNode1的结果rdd和元数据。
(2)频次统计需要以指定的字段作为关键字,只有该关键字相同,才会被统计为一次。如果指定的字段为多个,则需要多个字段全部一致,才会被认为相同。
(3)遍历指定的字段,每次遍历都是以ActionNode1的结果rdd作为输入。将rdd中的每一行记录,按照分隔符“\001”打断,然后根据元数据,仅仅以该字段作为rdd的每一行。这样循环之后,会得到一组内容仅为相应字段的rdd,rdd个数为指定的字段的个数。
(4)遍历这一组rdd。设立一个中间变量rddTmp,当rdd对应的是第一个字段时,rddTmp=rdd。否则,rddTmp=rddTmp.zip(rdd).map(x=>x._1+“\001”+x._2),最终得到仅有指定的字段的一个rdd。
(5)对上述rdd进行groupBy(x=>x).mapValues(_.size).map(x=>x._1+“\001”+x._2)操作,即可得到一个包含指定的字段以及频次字段的rdd。
(6)若还有其他操作,比如进行类似SQL中的limit操作,可以使用rdd的take方法,然后使用sc.makeRDD()方法将结果转化为rdd。
(7)至此,ActionNode2运行完毕。ActionNode2的字段已经发生变化,结果rdd中仅有指定字段和相应的频次,所以元数据应为指定的字段、频次字段及其对应的索引。将最终的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将ActionNode2的执行状态标记为执行完毕。
所有前驱节点执行完毕的动作节点只有ActionNode3,故执行ActionNode3。ActionNode3为字段过滤节点,用于过滤出输入源中指定的字段,并输出处理后的数据,其功能类似于SQL中的查询字段操作。
具体而言,ActionNode3对应的数据处理操作包括如下步骤:
(1)获取前驱节点输出的rdd和元数据,即DataNode2的rdd和元数据。
(2)遍历指定的字段,每次遍历都是以DataNode2输出的rdd作为输入,每次遍历过滤出一个指定的字段。遍历完毕之后,会得到一组仅有指定的字段的rdd,每个rdd仅仅是一个字段的那一列内容。
(3)遍历这一组rdd。设立一个中间变量rddTmp,当rdd对应的是第一个字段时,rddTmp=rdd。否则,rddTmp=rddTmp.zip(rdd).map(x=>x._1+“\001”+x._2),最终得到仅有指定的字段的一个rdd。
(4)至此,ActionNode3运行完毕。结果rdd中仅有指定字段,所以元数据应为指定的字段及其对应的索引。将最终的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将ActionNode3的执行状态标记为执行完毕。
所有前驱节点执行完毕的动作节点只有ActionNode4,故执行ActionNode4。ActionNode4为交集节点,用于以多个输入源中每个输入源指定的字段为连接键,对多个输入源进行内连接,并输出处理后的数据,其功能类似于SQL中的内连接操作。
具体而言,ActionNode4对应的数据处理操作包括如下步骤:
(1)求交集是多个rdd之间的操作。首先获取ActionNode1和ActionNode3的结果rdd和元数据。求交集操作的每个前驱节点,都必须带有指定的字段,不同的前驱节点,字段可以不同。在求交集操作中,只有多个输入源的所有指定的字段的值都相等,才能进行。
(2)遍历每个前驱节点的结果rdd,内部遍历每个指定的字段,将每个字段对应的内容筛选出来,作为单独的rdd,两层遍历后,会得到x组rddList,每个rddList里面包含y个rdd。其中,x代表前驱节点的个数,y代表每个前驱Node所指定的字段的个数。
(3)遍历多个rddList,对同一个rddList里面的rdd进行zip操作(拉链操作),再将结果由Tuple(x1,x2)的形式转化为String的形式,具体方式为当rdd为rddList里面的第一个rdd时,rddTmp=rdd,否则,rddTmp=rddTmp.zip(rdd).map(x=>x._1+“\001”+x._2),最终得到一组只有指定的字段的rdd。
(4)遍历这一组rdd,让每个rdd和其对应的前驱节点的结果rdd进行zip操作,形成Tuple(joinkey,line)的形式。最后生成一组格式统一的rdd,其格式为RDD[Tuple[String,String]]。
(5)遍历上面生成的一组rdd,依次进行join操作。具体为rdd1.join(rdd2).mapValues(x=>x._1+“\001”+x._2),遍历完成之后,最终得到仅有保留的字段的一个rdd。
(6)将上述rdd的格式通过rdd.map(_._2)还原为RDD[String]。
(7)至此,ActionNode4运行完毕。结果rdd中为保留的字段,所以元数据应为保留的字段及其对应的索引。将最终的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将ActionNode4的执行状态标记为执行完毕。
所有前驱节点执行完毕的动作节点只有ActionNode5和ActionNode6。从这两个动作节点中随机选择一个开始运行,假设ActionNode6首先运行。ActionNode6为并集节点,用于合并多个输入源的内容,并输出处理后的数据,其功能类似于SQL中的union操作。
具体而言,ActionNode6对应的数据处理操作包括如下步骤:
(1)求并集操作要求多个输入源之间的rdd格式一致,即结果rdd中每一行的分隔符数量要一样多,才能保证union操作顺利进行,首先获取到所有前驱节点的结果rdd和元数据,即DataNode3和ActionNode4的结果rdd和元数据。
(2)遍历结果rdd,当遍历为第一次时,rddTmp=rdd,否则,rddTmp=rddTmp.union(rdd),最终得到一个rdd。
(3)至此,ActionNode6运行完毕。结果rdd的元数据为第一个前驱节点的元数据。将最终的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将ActionNode6的执行状态标记为执行完毕。
所有前驱节点执行完毕的动作节点只有ActionNode5,故执行ActionNode5。ActionNode5为字段拼接节点,用于以多个输入源中每个输入源指定的字段为连接键,对多个输入源进行左外连接,并输出处理后的数据,其功能类似于SQL中的左外连接操作。
具体而言,ActionNode5对应的数据处理操作包括如下步骤:
(1)字段拼接是多个rdd之间的操作。首先获取ActionNode2和ActionNode4的结果rdd和元数据。字段拼接操作的每个前驱节点,都必须带有指定的字段,不同的前驱节点,字段可以不同。在字段拼接操作中,只有多个输入源的所有指定的字段的值都相等,才能进行。
(2)遍历每个前驱节点的结果rdd,内部遍历每个指定的字段,将每个字段对应的内容筛选出来,作为单独的rdd,两层遍历后,会得到x组rddList,每个rddList里面包含y个rdd。其中,x代表前驱节点的个数,y代表每个前驱Node所指定的字段的个数。
(3)遍历多个rddList,对同一个rddList里面的rdd进行zip操作,再将结果由Tuple(x1,x2)的形式转化为String的形式,具体方式为当rdd为rddList里面的第一个rdd时,rddTmp=rdd,否则,rddTmp=rddTmp.zip(rdd).map(x=>x._1+“\001”+x._2),最终得到一组只有指定的字段的rdd。
(4)遍历这一组rdd,让每个rdd和其对应的前驱节点的结果rdd进行zip操作,形成Tuple(joinkey,line)的形式。最后生成一组格式统一的rdd,其格式为RDD[Tuple[String,String]]。
(5)遍历上面生成的一组rdd,依次进行leftOuterjoin操作。具体为rdd1.leftOuterjoin(rdd2).mapValues(x=>x._1+“\001”+x._2),遍历完成之后,最终得到仅有保留的字段的一个rdd。
(6)将上述rdd的格式通过rdd.map(_._2)还原为RDD[String]。
(7)至此,ActionNode5运行完毕。结果rdd中为保留的字段,所以元数据应为保留的字段及其对应的索引。将最终的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将ActionNode5的执行状态标记为执行完毕。
所有前驱节点执行完毕的动作节点只有ActionNode7,故执行ActionNode7。ActionNode7为差集节点,用于从第一个输入源中删除掉含有与第二个输入源中指定的字段的值相同的内容,并输出处理后的数据。
具体而言,ActionNode7对应的数据处理操作包括如下步骤:
(1)求差集操作只允许有且仅有两个前驱节点。首先获取ActionNode5和ActionNode6的结果rdd和元数据。求差集操作的每个前驱节点,都必须带有指定的字段,不同的前驱节点,字段可以不同。在求差集操作中,只有两个输入源的所有指定的字段的值都相等,才能进行。
(2)遍历每个前驱节点的结果rdd,内部遍历每个指定的字段,将每个字段对应的内容筛选出来,作为单独的rdd,两层遍历后,会得到x组rddList,每个rddList里面包含y个rdd。其中,x代表前驱节点的个数,y代表每个前驱Node所指定的字段的个数。
(3)遍历多个rddList,对同一个rddList里面的rdd进行zip操作,再将结果由Tuple(x1,x2)的形式转化为String的形式,具体方式为当rdd为rddList里面的第一个rdd时,rddTmp=rdd,否则,rddTmp=rddTmp.zip(rdd).map(x=>x._1+“\001”+x._2),最终得到两个只有指定的字段的rdd。
(4)对这两个rdd,让每个rdd和其对应的前驱节点的结果rdd进行zip操作,形成Tuple(joinkey,line)的形式。最后生成两个格式统一的rdd,其格式为RDD[Tuple[String,String]]。
(5)对上面生成的两个rdd进行subtract操作。具体为rdd1.subtract(rdd2),最终得到一个rdd。
(6)将上述rdd的格式通过rdd.map(_._2)还原为RDD[String]。
(7)至此,ActionNode7运行完毕。结果rdd的元数据为第一个前驱节点的元数据。将最终的rdd保存至resutRddMap,并将rdd对应的元数据保存至resutRddMetaMap,同时将ActionNode7的执行状态标记为执行完毕。
所有前驱节点执行完毕的动作节点只有ActionNode8,故执行ActionNode8。ActionNode8为保存节点,用于将输入源保存为Hive表格或HDFS文件。
具体而言,ActionNode8对应的数据处理操作包括如下步骤:
(1)获取前驱节点输出的rdd和元数据,即ActionNode7的结果rdd和元数据。
(2)判断指定的存储类型,若为HDFS文件,直接将结果rdd以普通文件的形式存储在HDFS指定的路径上;若为Hive表格,将结果rdd存放在Hive指定的数据库目录下,建立外部表映射关联。
(3)将ActionNode8的执行状态标记为执行完毕,因为ActionNode8是最终节点,所以无需储存结果rdd和元数据。
综上所述,本发明第一实施例提供的计算方法从而,针对不同的业务需求,只需要修改配置文件,重新配置节点以及边之间的组合关系即可,配置过程灵活方便,对于程序包中的代码则无需进行更改,实现了代码的一次编写,多次使用的原则,同时显著提高了针对不同业务的计算程序的开发效率,减轻了程序开发人员的工作负担。该方法可以应用于Spark程序中,但并不限于在Spark程序中应用。
第二实施例
在第二实施例中,通过将本发明实施例提供的计算方法与SQL语句进行类比的方式进一步阐述该计算方法。
Hive中default数据库有student,sc两张表格,student的字段有sno、sname、sage、sex,sc的字段有sno、cno、score。图4示出了本发明第二实施例提供的student表格的内容示意图。图5示出了本发明第二实施例提供的score表格的内容示意图。
现在有一个需求:想查出所有女同学的所有成绩。如果直接使用sparkSQL操作,即使用类SQL的方式,那么SQL语句应该为:
select score,cno from sc where sno in(select sno from student wheresex=‘female’)
为便于阐述,对SQL语句进行一下变形:
select a.score,a.cno from sc a join(select sno from student where sex=’female’)b on a.sno=b=sno
即将SQL最终转换为连表查询。
如果现在需求一直变化,复杂程度也不相同,使用一套代码操作,那么SQL语句就要实现动态生成,而复杂的SQL语句,由机器自动生成的质量不佳,动态生成SQL的方法不可靠。
因此可以使用本发明实施例提供的计算方法。上面的SQL语句中,有两个数据源节点,分别对应student表格以及sc表格。其他的select,from,join等操作都会被对应为相应的动作节点。
与上述SQL语句对应的有向无环图如图6所示,DataNode1以及DataNode2为数据源节点,ActionNode1至ActionNode5为动作节点,在每个节点的方框中都注明了其对应的SQL语句的片段。带箭头的连接线表示数据的流向,和SQL语句不同的是,执行SQL直接输出最终结果,而按照有向无环图执行,每个节点运算之后都会有结果,每个节点的输出会成为箭头指向的节点的输入,直到最后以HDFS文件或者Hive表格的形式输出到硬盘上。
SQL语句中的关键字都是固定的,不同的SQL只是拼接顺序不同而已。本发明也类似,每个节点的类型是固定的,只是数量和拼接顺序不同。所以将变化的SQL需求转换成了变化的有向无环图的拼接需求。针对不同的业务需求,只需要改变配置文件中的节点和边的组合关系,以及节点的参数就行。
在使用RDD[String]进行计算的过程中,列与列之间是连在一起的,相当于能够获取的内容为一整行,图7示出了本发明第二实施例提供的student表格对应的rdd的示意图。参照图7,列与列之间拼接成了一个字符串,每列之间使用“\001”隔开(该字符不可见,因此图中未示出),如果要得到某个字段,比如sage,就得先根据分隔符拆分字符串,然后根据sage所在的位置2(前面是sno,sname,从0开始编号)获取。所以每一个字符串都需要有通过元数据(字段名称和字段的索引)进行描述。
图8示出了本发明第二实施例提供的业务流程中的每个节点输出的rdd以及metaMap的示意图。参照图8可以看到有向无环图的执行过程以及每个节点对应的数据处理操作执行后产生的输出。
本发明第二实施例未提及之处,可以参考第一实施例中的相关描述,这里不再重复阐述。
第二实施例
图9示出了本发明第三实施例提供的计算装置200的功能模块图。参照图9,该装置包括读取模块210、构建模块220以及执行模块230。
其中,读取模块210用于读取并解析配置文件,配置文件的内容包括多个节点以及连接多个节点的至少一条边,其中,每个节点用于表示业务流程中的一个数据处理单元,每条边用于表示两个节点之间的数据流向;
构建模块220用于创建多个节点,并基于多个节点以及至少一条边构建用于表示业务流程的有向无环图,其中,每个节点以及每个节点对应的数据处理操作均定义在预先生成的程序包中;
执行模块230用于按照有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。
本发明第三实施例提供的计算装置200,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
第四实施例
本发明第四实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的计算方法的步骤。该计算机可读存储介质可以实现为,但不限于图1示出的存储器102。
第五实施例
本发明第五实施例提供一种电子设备,包括存储器以及处理器,存储器中存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的计算方法的步骤。该电子设备可以实现为,但不限于图1示出的电子设备100。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其他的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得计算机设备执行本发明各个实施例所述方法的全部或部分步骤。前述的计算机设备包括:个人计算机、服务器、移动设备、智能穿戴设备、网络设备、虚拟设备等各种具有执行程序代码能力的设备,前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟、磁带或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种计算方法,其特征在于,包括:
读取并解析配置文件,所述配置文件的内容包括多个节点以及连接所述多个节点的至少一条边,其中,每个节点用于表示业务流程中的一个数据处理单元,每条边用于表示两个节点之间的数据流向;
创建所述多个节点,并基于所述多个节点以及所述至少一条边构建用于表示所述业务流程的有向无环图,其中,每个节点以及每个节点对应的数据处理操作均定义在预先生成的程序包中;
按照所述有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。
2.根据权利要求1所述的计算方法,其特征在于,所述多个节点包括数据源节点以及动作节点;
所述数据源节点用于基于所述配置文件中指定的数据源参数从数据源读取并输出数据,所述动作节点用于基于所述配置文件中指定的动作参数对所述数据进行运算处理。
3.根据权利要求2所述计算方法,其特征在于,所述按照所述有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕,包括:
执行每个数据源节点对应的数据处理操作,并在执行完毕后将每个数据源节点的执行状态标记为执行完毕;
选择一个可执行动作节点,所述可执行动作节点为尚未执行对应的数据处理操作的,且自身的前驱节点的执行状态均被标记为执行完毕的动作节点;
执行所述可执行动作节点对应的数据处理操作,并在执行完毕后将所述可执行动作节点的执行状态标记为执行完毕;
重复执行所述“选择一个可执行动作节点”至“在执行完毕后将所述可执动作行节点的执行状态标记为执行完毕”的步骤,直至每个动作节点对应的数据处理操作均执行完毕。
4.根据权利要求3所述的计算方法,其特征在于,所述选择一个可执行动作节点,包括:
在尚未执行对应的数据处理操作的动作节点中包括多个可执行动作节点时,从中随机选择一个可执行动作节点,可执行动作节点的选择不影响所述业务流程的最终执行结果。
5.根据权利要求3或4所述的计算方法,其特征在于,在所述选择一个可执行动作节点之前,所述方法还包括:
将每个动作节点的标识以及每个动作节点的前驱节点构成的键值对保存至第一哈希表。
6.根据权利要求2所述的计算方法,其特征在于,所述计算方法应用于Spark程序中,所述数据在传输以及处理过程中被封装为弹性分布式数据集RDD的形式。
7.根据权利要求6所述的计算方法,其特征在于,所述计算方法还包括:
将每个节点的标识以及每个节点输出的数据构成的键值对保存至第二哈希表;
将每个节点的标识以及每个节点的元数据构成的键值对保存至第三哈希表,其中,任一节点的元数据为以字段以及所述字段在该节点的输出数据中的索引为键值对的哈希表。
8.根据权利要求7所述的计算方法,其特征在于,所述数据源包括Hive表格和/或HDFS文件。
9.根据权利要求7所述的计算方法,其特征在于,所述动作节点包括条件过滤节点、时空过滤节点、频次统计节点、字段过滤节点、字段拼接节点、交集节点、并集节点、差集节点以及保存节点中的至少一种节点;
所述条件过滤节点用于基于指定的条件对输入源中指定的字段进行过滤,并输出处理后的数据;
所述时空过滤节点用于基于指定的条件以对输入源中的时间字段和/或地点字段进行过滤,并输出处理后的数据;
所述频次统计节点用于统计输入源中指定的字段的值均相同的内容的数量,并输出处理后的数据;
所述字段过滤节点用于过滤出输入源中指定的字段,并输出处理后的数据;
所述字段拼接节点用于以多个输入源中每个输入源指定的字段为连接键,对所述多个输入源进行左外连接,并输出处理后的数据;
所述交集节点用于以多个输入源中每个输入源指定的字段为连接键,对所述多个输入源进行内连接,并输出处理后的数据;
所述并集节点用于合并多个输入源的内容,并输出处理后的数据;
所述差集节点用于从第一个输入源中删除掉含有与第二个输入源中指定的字段的值相同的内容,并输出处理后的数据;
所述保存节点用于将输入源保存为Hive表格或HDFS文件;
其中,所述输入源为所述动作节点的前驱节点执行完毕后输出的数据。
10.一种计算装置,其特征在于,包括:
读取模块,用于读取并解析配置文件,所述配置文件的内容包括多个节点以及连接所述多个节点的至少一条边,其中,每个节点用于表示业务流程中的一个数据处理单元,每条边用于表示两个节点之间的数据流向;
构建模块,用于创建所述多个节点,并基于所述多个节点以及所述至少一条边构建用于表示所述业务流程的有向无环图,其中,每个节点以及每个节点对应的数据处理操作均定义在预先生成的程序包中;
执行模块,用于按照所述有向无环图中的数据流向执行每个节点对应的数据处理操作,直至每个节点对应的数据处理操作均执行完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810792110.4A CN109101575A (zh) | 2018-07-18 | 2018-07-18 | 计算方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810792110.4A CN109101575A (zh) | 2018-07-18 | 2018-07-18 | 计算方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109101575A true CN109101575A (zh) | 2018-12-28 |
Family
ID=64846759
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810792110.4A Pending CN109101575A (zh) | 2018-07-18 | 2018-07-18 | 计算方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109101575A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110428341A (zh) * | 2019-08-06 | 2019-11-08 | 哈尔滨工业大学软件工程股份有限公司 | 医保费用结算方法、设备及计算机可读存储介质 |
CN111190918A (zh) * | 2019-12-25 | 2020-05-22 | 中科驭数(北京)科技有限公司 | 基于计算流图的数据库访问方法及装置 |
CN111400411A (zh) * | 2020-03-04 | 2020-07-10 | 河南安冉云网络科技有限公司 | 一种Excel数据的处理方法、系统及设备 |
CN111610908A (zh) * | 2019-02-25 | 2020-09-01 | 上海哔哩哔哩科技有限公司 | 一种生成框架图的方法、计算机设备及可读存储介质 |
CN112084196A (zh) * | 2020-09-11 | 2020-12-15 | 武汉一格空间科技有限公司 | 一种流程化数据处理方法及系统 |
CN113268188A (zh) * | 2021-06-16 | 2021-08-17 | 深圳市商汤科技有限公司 | 任务处理方法、装置、设备及存储介质 |
CN113626102A (zh) * | 2021-08-09 | 2021-11-09 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103491024A (zh) * | 2013-09-27 | 2014-01-01 | 中国科学院信息工程研究所 | 一种面向流式数据的作业调度方法及装置 |
CN106557363A (zh) * | 2016-12-05 | 2017-04-05 | 广发证券股份有限公司 | 一种大数据任务调度的系统以及方法 |
CN107577629A (zh) * | 2017-09-25 | 2018-01-12 | 北京因特睿软件有限公司 | 一种数据接口处理方法、装置、服务器及介质 |
-
2018
- 2018-07-18 CN CN201810792110.4A patent/CN109101575A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103491024A (zh) * | 2013-09-27 | 2014-01-01 | 中国科学院信息工程研究所 | 一种面向流式数据的作业调度方法及装置 |
CN106557363A (zh) * | 2016-12-05 | 2017-04-05 | 广发证券股份有限公司 | 一种大数据任务调度的系统以及方法 |
CN107577629A (zh) * | 2017-09-25 | 2018-01-12 | 北京因特睿软件有限公司 | 一种数据接口处理方法、装置、服务器及介质 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111610908A (zh) * | 2019-02-25 | 2020-09-01 | 上海哔哩哔哩科技有限公司 | 一种生成框架图的方法、计算机设备及可读存储介质 |
CN111610908B (zh) * | 2019-02-25 | 2021-06-29 | 上海哔哩哔哩科技有限公司 | 一种生成框架图的方法、计算机设备及可读存储介质 |
CN110428341A (zh) * | 2019-08-06 | 2019-11-08 | 哈尔滨工业大学软件工程股份有限公司 | 医保费用结算方法、设备及计算机可读存储介质 |
CN111190918A (zh) * | 2019-12-25 | 2020-05-22 | 中科驭数(北京)科技有限公司 | 基于计算流图的数据库访问方法及装置 |
CN111400411A (zh) * | 2020-03-04 | 2020-07-10 | 河南安冉云网络科技有限公司 | 一种Excel数据的处理方法、系统及设备 |
CN111400411B (zh) * | 2020-03-04 | 2024-04-19 | 河南安冉云网络科技有限公司 | 一种Excel数据的处理方法、系统及设备 |
CN112084196A (zh) * | 2020-09-11 | 2020-12-15 | 武汉一格空间科技有限公司 | 一种流程化数据处理方法及系统 |
CN112084196B (zh) * | 2020-09-11 | 2023-10-17 | 武汉一格空间科技有限公司 | 一种流程化数据处理方法及系统 |
CN113268188A (zh) * | 2021-06-16 | 2021-08-17 | 深圳市商汤科技有限公司 | 任务处理方法、装置、设备及存储介质 |
CN113268188B (zh) * | 2021-06-16 | 2023-06-30 | 深圳市商汤科技有限公司 | 任务处理方法、装置、设备及存储介质 |
CN113626102A (zh) * | 2021-08-09 | 2021-11-09 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109101575A (zh) | 计算方法及装置 | |
Zakir et al. | Big data analytics. | |
CN104767813B (zh) | 基于openstack的公众行大数据服务平台 | |
US8972872B2 (en) | Building computing applications based upon metadata | |
US8725707B2 (en) | Data continuous SQL process | |
US9229978B2 (en) | Rule-based extendable query optimizer | |
CN108090154A (zh) | 一种异构多源数据融合查询方法及装置 | |
EP2657860A1 (en) | Data flow graph optimization using rules | |
CN109033109B (zh) | 数据处理方法及系统 | |
US20150081741A1 (en) | Incremental graph view maintenance | |
US9992269B1 (en) | Distributed complex event processing | |
US11023468B2 (en) | First/last aggregation operator on multiple keyfigures with a single table scan | |
EP4152224A1 (en) | Machine learning application method, device, electronic apparatus, and storage medium | |
US20130290292A1 (en) | Augmented Query Optimization by Data Flow Graph Model Optimizer | |
CN104598550B (zh) | 一种网络视频索引的更新方法和装置 | |
CN104346371A (zh) | 内存数据库驱动业务整合系统报告 | |
Ounacer et al. | A new architecture for real time data stream processing | |
CN110188100A (zh) | 数据处理方法、装置及计算机存储介质 | |
CN113168362A (zh) | 用于实施输出审核数据的可恢复性的专用审核端口 | |
Dhavapriya et al. | Big data analytics: challenges and solutions using Hadoop, map reduce and big table | |
US10067980B2 (en) | Database calculation engine integrating hierarchy views | |
EP2657861A1 (en) | Calculation models using annotations for filter optimization | |
Ghrab et al. | Graph BI & analytics: current state and future challenges | |
US9116960B2 (en) | Calculation engine with optimized multi-part querying | |
US10324927B2 (en) | Data-driven union pruning in a database semantic layer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181228 |
|
RJ01 | Rejection of invention patent application after publication |