CN108153522A - 基于模型转换由midcore生成Spark和Hadoop程序代码的方法 - Google Patents

基于模型转换由midcore生成Spark和Hadoop程序代码的方法 Download PDF

Info

Publication number
CN108153522A
CN108153522A CN201711418644.2A CN201711418644A CN108153522A CN 108153522 A CN108153522 A CN 108153522A CN 201711418644 A CN201711418644 A CN 201711418644A CN 108153522 A CN108153522 A CN 108153522A
Authority
CN
China
Prior art keywords
sentences
codes
midcore
data
hadoop
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.)
Granted
Application number
CN201711418644.2A
Other languages
English (en)
Other versions
CN108153522B (zh
Inventor
张天
刘拨杰
潘敏学
李宣东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201711418644.2A priority Critical patent/CN108153522B/zh
Publication of CN108153522A publication Critical patent/CN108153522A/zh
Application granted granted Critical
Publication of CN108153522B publication Critical patent/CN108153522B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种由模型转换中间语言midcore生成Spark和Hadoop程序代码的方法。包括步骤1:建立两个xtext项目,分别对midcore语言进行抽象,抽出其中的语法树,进行建模,书写xtext的语法计解析器代码,步骤2:用xtend在其中一个项目中书写从midcore映射至Spark代码的转换规则,步骤3:用xtend在另一个项目中书写midcore映射生成Hadoop代码的转换规则。本发明将可以由现有的模型转换语言转换而成的中间语言对Spark和Hadoop两个平台的代码做了映射,为模型转换语言和Mapreduce程序实现了桥接,同时支持由midcore直接描述模型转换,生成Mapreduce程序代码,降低了Mapreduce程序开发的复杂性。

Description

基于模型转换由midcore生成Spark和Hadoop程序代码的方法
技术领域
本发明涉及一种代码生成方法,主要利用模型转换技术来实现由QVT-R语言自动化生成midCore脚本的任务,属于计算机技术、模型转换技术、领域特定语言和代码生成技术大数据分布式数据处理的交叉技术应用领域。
背景技术
数据转换是对于异构数据的常用处理方法。随着企业、组织间的紧密合作以及兼并,异构的数据信息资源广泛存在着,严重影响了部门间的信息交流。而数据转换的目标就是将异构的数据信息进行转换,并消除数据中存在的各种错误,优化数据模型,得到理想的数据模型。
计算机领域存在大量的领域特定语言(Domain Specific Language,简称DSL),它们通常用于处理各种领域特定问题,本发明中涉及的midCore脚本则一种DSL,它是由南京大学软件工程组设计的一种面向大数据转换的领域特定语言,提供了数据模型描述、匹配、转换等操作算子,可以向多个大数据处理平台自动化映射,从而更加简便的完成大数据处理任务。以上两种语言可以分别看成模型转换的输入模型和输出模型。
Spark是现在常用的一种大数据平台,随着信息社会的高速发展,人们每天无论是生活还是工作都会产生并且接触到爆炸增长的信息量,从而使得工业界要处理的信息越来越多,也越来越复杂。传统的数据转换方法已经无法快捷高效的处理大数据的转换,因此演化出了如Spark之类的大数据平台。但是Spark平台在高效处理大数据的同时,具有一定的平台复杂性,学习成本较高,对于刚刚接触该平台的用户并不友好。
Hadoop是当今另一种常用的,且非常具有代表性的大数据平台。该方法是对Mapreduce编程模型的实现,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。然而该框架采用Mapper和Reducer类中的方法来表示数据操作,有一定的领域复杂性,对于日常数据操作的表达,并不友好。
Xtext是基于eclipse的一个插件工具,利用该工具我们可以自己定义一种基于文本的领域特定语言,然后创建出自定义程序语言。这里我们通过该工具实现了转换原语的设计,并通过它产生Spark代码,从而降低基于Spark平台的大数据转换实现成本,解决在大数据平台进行数据转换复杂性较高这一问题。
发明内容
发明目的:针对现有技术中存在的问题,本发明是为了完成QVT等模型转换语言与Mapreduce的多种实现平台之间的桥接,是midcore语言脚本设计工作和代码生成工作的延续。本发明是利用模型驱动开发思想实现大数据程序开发工作的重要组成部分,也可以单独成为一项在抽象层次开发Mapreduce程序的工作,屏蔽了大数据具体平台的平台开发复杂性,简化了大数据程序的开发过程。
为了实现上述发明目的,本发明采用的技术方案为:
一种基于模型转换由midcore生成spark和hadoop程序代码的方法,其步骤包括:
步骤1:按照midcore语言的语法,建立抽象语法树,并在xtext工具中用xtextgrammer language准确描述出来;
步骤11:Model元素为语法树根节点,即总入口,包含了若干个Domain和Rule语句;
步骤12:Domain语句以”domain”为匹配关键字,含有若干个Source语句和Target语句;
步骤13:Source语句以”source”为匹配关键字,含有inputData元素,若干条Class语句;
步骤14:Target语句以”target”为匹配关键字,含有outputData元素,若干条Class语句;
步骤15:Class语句以class为匹配关键字,含有name和attributes元素,可选关键字abstract,extends,元素name,含有若干条Attribute,Format和Path语句;
步骤16:Attribute语句以”;”为匹配关键字,含有name和type元素;Path语句以”path”为关键字,含有value元素;Format以”fomat”为匹配关键字,含有value元素;
步骤17:Rule语句含有name元素,若干条Commad语句,Command语句分为Filter,Join,Deduplicate,Generate,StopClause语句,Reduce语句;
步骤18:Filter语句以”filter”为匹配关键字,含有元素result,name,attribute,type和value;
步骤19:Join语句以”join”为匹配关键字,含有元素tableCount,classname,keyname;
步骤110:Deduplicate语句以”deduplicate”为匹配关键字,含有attribute,result,name元素;
步骤111:Generate以”flatmap”或者”map”为匹配关键字,含有元素result,param,包括若干条Expression语句,Expression分为了Assignment,If_expression,Variable,ArithmicExpression语句几类,分别遵守OMG公布的OCL标准;
步骤112:Rduce语句以”reduce”作为匹配关键字,含有元素result和name;
步骤113:StopClause语句以”=”,”;”为匹配关键字,含有元素target_n和target_v;
步骤2:采用xtend根据xtext grammar language书写的语法分析树,书写midcore到spark代码的映射规则,合称M2S框架;
步骤21:将Domain语句映射生成scala的数据类,Source语句生成输入数据类,加入输入数据解析的方法和输入路径,Target语句生成输出数据类,数据类的存放结构为ArrayList[Any]加入输出数据转化为文本的方法和输出路径,Class语句生成数据类的属性等信息;
步骤22:将Rule语句映射生成scala的一个名为Main的object的主函数,并加入配置SparkConf和SparkContext的语句,并在主函数当中调用输入数据类的输入数据解析方法;
步骤23:将Filter语句生成相应的spark代码,调用RDD的filter方法进行数据处理;
步骤24:将Join语句映射生成相应的spark代码,调用RDD语句先让源数据对应的RDD生成对应的PairFunctionRDD,然后这些PairFunctionRDD调用join方法进行若干次连接,PariFunctionRDD中的ArrayList[Any]调用+=操作进行ArrayList的合并;
步骤25:将Deduplicate语句映射生成相应的spark代码,调用RDD的map方法首先转化成PairFunctionRDD,再调用reduce方法进行去重操作,最后再调用map方法转换回RDD;
步骤26:将Generate语句映射生成相应的spark代码,调用RDD的map或者flatmap方法,在其中新建一个ArrayList[Any],把生成的数据添加到这个结构中;
步骤27:将StopClause语句映射生成最后的赋值语句,赋值给最终结果,并调用输出数据类的输出数据方法,进行输出数据;
步骤3:在xtext和xtend书写好的M2S框架中输入midcore代码,生成spark代码,提交运行;
步骤31:对M2S相应的xtext项目右键点击run as EclipseApplication,运行框架,在src文件夹中新建格式为midcore文本文件,输入midcore代码;
步骤32:框架自动生成scala代码,位于src-gen文件夹中;
步骤33:将自动生成的代码放入创建的scala项目中,将Main选定为主类,导出jar包,提交到spark集群即可运行处理数据。
步骤4:采用xtend根据xtext grammer language书写的语法分析树,书写midcore到hadoop代码的映射规则,合称M2H框架;
步骤41:将Rule对应生成Java的Main类和main函数,main函数包括了新创建一个hadoop的多个job;
步骤42:Domain里的Source和Target语句分别生成主类里面的两个静态方法,即输入数据的解析方法,将读入的文本数据按照格式进行解析,最终返回ArrayList[Object]类型;输出数据的解析方法将ArrayList类型转换按照要求的输出格式成文本进行输出;
步骤43:创建两轮Mapreduce处理过程,分别进行输入和输出操作,其中Map方法调用52中数据输入和输出方法,Reducer不做操作;
步骤44:对于Filter语句,在Hadoop创建一轮mapreduce迭代job,map方法将ArrayList[Object]调用parallelStream()方法转化成Stream再调用filter方法进行数据处理,reduce方法不做操作;
步骤45:对于Join语句,我们新建一轮mapreduce迭代过程job,在map函数中调用parallellStream()方法转化成Stream类型,之后调用map方法抽取出用于匹配的关键字作为key,reduce方法中对key匹配的两个ArrayList调用addAll操作进行合并,完成连接操作;
步骤46:对于Deduplicate语句映射成相应hadoop代码,在hadoop中创建一轮mapreduce过程job,map方法将ArrayList[Object]调用parallelStream()方法转化成Stream再调用Streams中的reduce方法进行数据处理,Reducer中的reduce方法不做操作;
步骤47:对于Generate语句,我们新建一轮hadoop的mapreduce过程,在map函数中调用parallellStream()方法转化成Streams类型,之后调用Streams中的generate方法,创建新的ArrayList,放入我们想生成的数据,reduce过程不做操作;
步骤48:对于reduce语句,我们新建一轮hadoop的mapreduce过程job,mapper类中抽取key,接着为其定义一个reducer,在reduce函数中将Iterable类型转换成Stream类型,然后调用reduce方法进行reduce操作
步骤49:最后添加输出数据的这轮mapreduce过程job,FileInputFormat和FileOutputFormat类添加输入和输出路径,形成完整的hadoop程序;
步骤5:在xtext和xtend书写好的M2H框架中输入midcore代码,生成hadoop代码,提交运行;
步骤51:在M2H相应的xtext项目右击选择run as Eclipse Application选项,运行M2H框架,在src文件夹中新建格式为midcore文本文件,输入midcore代码;
步骤52:框架自动生成java代码,位于src-gen文件夹中;
步骤53:将自动生成的代码放入创建的java项目中,将Main选定为主类,导出jar包,提交到hadoop集群即可运行处理数据。
有益效果:本发明结合了MDE思想以及代码生成技术,实现了midcore代码同时能生成Spark和Hadoop代码工作。由于midcore由现有的模型转换语言生成,本发明很好地桥接了模型转换语言和大数据平台,降低了大数据程序开发的复杂性,多个平台的兼容,有效提高了开发效率。
附图说明
图1为本发明实施例的midcore生成spark和hadoop代码方法流程和架构图。
图2为本发明实施例的xtext grammer language书写的midcore部分文法。
图3为本发明实施例的xtext书写的文法解析生成的midcore语法树模型部分内容。
图4为本发明实施例的midcore与生成的spark代码片段对照。
图5为本发明实施例的midcore生成hadoop的代码片段对照。
具体实施方式
下面结合附图和具体实施例对本方法做进一步详细说明。
图1为本发明实施例的midcore生成spark和hadoop代码方法流程和架构图。Spark和hadoop是当今最富代表性的大数据平台,都是基于mapreduce编程模型的实现,本方法实现了midcore语言的语法解析,并自动生成这两大平台的程序代码,以实现以QVT-R为代表的现有模型转换语言与具体的大数据平台之间的桥接,以及方法良好的扩展性。本方法基于MDE的思想,屏蔽了具体大数据平台的细节,同时降低了多个平台的开发复杂性。如图1所以,本实施例的基于模型转换由midcore生成Spark和Hadoop程序代码的方法,包括步骤:
步骤1:按照midcore语言的语法,建立抽象语法树,并在xtext工具中用xtextgrammer language准确描述出来;
步骤2:采用xtend根据xtext grammar language书写的语法分析树,书写midcore到spark代码的映射规则,合称M2S框架;
步骤3:在xtext和xtend书写好的M2S框架中输入midcore代码,生成spark代码,提交运行;
步骤4:采用xtend根据xtext grammer language书写的语法分析树,书写midcore到hadoop代码的映射规则,合称M2H框架;
步骤5:在xtext和xtend书写好的M2H框架中输入midcore代码,生成hadoop代码,提交运行。
在步骤1中,我们用xtext书写了midcore的文法,基于此形成了midcore的语法树。图2展示了我们用xtext书写的部分文法,图3展示了我们的文法对应的语法树。书写和构建文法包括以下步骤:
步骤11:Model元素为语法树根节点,即总入口,包含了若干个Domain和Rule语句;
步骤12:Domain语句以”domain”为匹配关键字,含有若干个Source语句和Target语句;
步骤13:Source语句以”source”为匹配关键字,含有inputData元素,若干条Class语句;
步骤14:Target语句以”target”为匹配关键字,含有outputData元素,若干条Class语句;
步骤15:Class语句以class为匹配关键字,含有name和attributes元素,可选关键字abstract,extends,元素name,含有若干条Attribute,Format和Path语句;
步骤16:Attribute语句以”;”为匹配关键字,含有name和type元素;Path语句以”path”为关键字,含有value元素;Format以”fomat”为匹配关键字,含有value元素;
步骤17:Rule语句含有name元素,若干条Commad语句,Command语句分为Filter,Join,Deduplicate,Generate,StopClause语句,Reduce语句;
步骤18:Filter语句以”filter”为匹配关键字,含有元素result,name,attribute,type和value;
步骤19:Join语句以”join”为匹配关键字,含有元素tableCount,classname,keyname;
步骤110:Deduplicate语句以”deduplicate”为匹配关键字,含有attribute,result,name元素;
步骤111:Generate以”flatmap”或者”map”为匹配关键字,含有元素result,param,包括若干条Expression语句,Expression分为了Assignment,If_expression,Variable,ArithmicExpression语句几类,分别遵守OMG公布的OCL标准;
步骤112:Rduce语句以”reduce”作为匹配关键字,含有元素result和name;
步骤113:StopClause语句以”=”,”;”为匹配关键字,含有元素target_n和target_v;
基于MDE思想,DSL技术和代码生成技术,我们在eclipse的插件xtext上构建了一套由midcore生成spark代码的框架,成为M2S,图4是一个实例的midcore代码与生成的spark代码的主函数部分对照。midcore生成spark代码的步骤如下:
步骤2:采用xtend根据xtext grammar language书写的语法分析树,书写midcore到spark代码的映射规则,合称M2S框架;
步骤21:将Domain语句映射生成scala的数据类,Source语句生成输入数据类,加入输入数据解析的方法和输入路径,Target语句生成输出数据类,数据类的存放结构为ArrayList[Any]加入输出数据转化为文本的方法和输出路径,Class语句生成数据类的属性等信息;
步骤22:将Rule语句映射生成scala的一个名为Main的object的主函数,并加入配置SparkConf和SparkContext的语句,并在主函数当中调用输入数据类的输入数据解析方法;
步骤23:将Filter语句生成相应的spark代码,调用RDD的filter方法进行数据处理;
步骤24:将Join语句映射生成相应的spark代码,调用RDD语句先让源数据对应的RDD生成对应的PairFunctionRDD,然后这些PairFunctionRDD调用join方法进行若干次连接,PariFunctionRDD中的ArrayList[Any]调用+=操作进行ArrayList的合并;
步骤25:将Deduplicate语句映射生成相应的spark代码,调用RDD的map方法首先转化成PairFunctionRDD,再调用reduce方法进行去重操作,最后再调用map方法转换回RDD;
步骤26:将Generate语句映射生成相应的spark代码,调用RDD的map或者flatmap方法,在其中新建一个ArrayList[Any],把生成的数据添加到这个结构中;
步骤27:将StopClause语句映射生成最后的赋值语句,赋值给最终结果,并调用输出数据类的输出数据方法,进行输出数据。
步骤3:在xtext和xtend书写好的M2S框架中输入midcore代码,生成spark代码,提交运行;
步骤31:对M2S相应的xtext项目右键点击run as EclipseApplication,运行框架,在src文件夹中新建格式为midcore文本文件,输入midcore代码;
步骤32:框架自动生成scala代码,位于src-gen文件夹中;
步骤33:将自动生成的代码放入创建的scala项目中,将Main选定为主类,导出jar包,提交到spark集群即可运行处理数据。
基于MDE思想,DSL技术和代码生成技术,我们在eclipse的插件xtext上构建了一套由midcore生成hadoop代码的框架,成为M2S,图4是一个实例的midcore代码与生成的hadoop代码的主函数部分对照。midcore生成hadoop代码的步骤如下:
步骤41:将Rule对应生成Java的Main类和main函数,main函数包括了新创建一个hadoop的job。
步骤42:Domain里的Source和Target语句分别生成主类里面的两个静态方法,即输入数据的解析方法,将读入的文本数据按照格式进行解析,最终返回ArrayList[Object]类型;输出数据的解析方法将ArrayList类型转换按照要求的输出格式成文本进行输出;
步骤43:创建两轮Mapreduce处理过程,分别进行输入和输出操作,其中Map方法调用52中数据输入和输出方法,Reducer不做操作;
步骤44:对于Filter语句,在Hadoop创建一轮mapreduce迭代job,map方法将ArrayList[Object]调用parallelStream()方法转化成Stream再调用filter方法进行数据处理,reduce方法不做操作;
步骤45:对于Join语句,我们新建一轮mapreduce迭代过程job,在map函数中调用parallellStream()方法转化成Stream类型,之后调用map方法抽取出用于匹配的关键字作为key,reduce方法中对key匹配的两个ArrayList调用addAll操作进行合并,完成连接操作;
步骤46:对于Deduplicate语句映射成相应hadoop代码,在hadoop中创建一轮mapreduce过程job,map方法将ArrayList[Object]调用parallelStream()方法转化成Stream再调用Streams中的reduce方法进行数据处理,Reducer中的reduce方法不做操作;
步骤47:对于Generate语句,我们新建一轮hadoop的mapreduce过程,在map函数中调用parallellStream()方法转化成Streams类型,之后调用Streams中的generate方法,创建新的ArrayList,放入我们想生成的数据,reduce过程不做操作;
步骤48:对于reduce语句,我们新建一轮hadoop的mapreduce过程job,mapper类中抽取key,接着为其定义一个reducer,在reduce函数中将Iterable类型转换成Stream类型,然后调用reduce方法进行reduce操作
步骤49:最后添加输出数据的这轮mapreduce过程job,FileInputFormat和FileOutputFormat类添加输入和输出路径,形成完整的hadoop程序;
步骤5:在xtext和xtend书写好的M2H框架中输入midcore代码,生成hadoop代码,提交运行;
步骤51:在M2H相应的xtext项目右击选择run as Eclipse Application选项,运行M2H框架,在src文件夹中新建格式为midcore文本文件,输入midcore代码;
步骤52:框架自动生成java代码,位于src-gen文件夹中;
步骤53:将自动生成的代码放入创建的java项目中,将Main选定为主类,导出jar包,提交到hadoop集群即可运行处理数据。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明权利要求书的保护范围。

Claims (6)

1.一种基于模型转换由midcore生成Spark和Hadoop程序代码的方法,其特征在于,步骤包括:
步骤1:按照midcore语言的语法,建立抽象语法树,并在xtext工具中用xtext grammerlanguage准确描述出来;
步骤2:采用xtend根据xtext grammar language书写的语法分析树,书写midcore到spark代码的映射规则,合称M2S框架;
步骤3:在xtext和xtend书写好的M2S框架中输入midcore代码,生成spark代码,提交运行;
步骤4:采用xtend根据xtext grammer language书写的语法分析树,书写midcore到hadoop代码的映射规则,合称M2H框架;
步骤5:在xtext和xtend书写好的M2H框架中输入midcore代码,生成hadoop代码,提交运行。
2.根据权利要求1所述的方法,其特征在于,所述步骤1的具体步骤为:
步骤11:Model元素为语法树根节点,即总入口,包含了若干个Domain和Rule语句;
步骤12:Domain语句以”domain”为匹配关键字,含有若干个Source语句和Target语句;
步骤13:Source语句以”source”为匹配关键字,含有inputData元素,若干条Class语句;
步骤14:Target语句以”target”为匹配关键字,含有outputData元素,若干条Class语句;
步骤15:Class语句以class为匹配关键字,含有name和attributes元素,可选关键字abstract,extends,元素name,含有若干条Attribute,Format和Path语句;
步骤16:Attribute语句以”;”为匹配关键字,含有name和type元素;Path语句以”path”为关键字,含有value元素;Format以”fomat”为匹配关键字,含有value元素;
步骤17:Rule语句含有name元素,若干条Commad语句,Command语句分为Filter,Join,Deduplicate,Generate,StopClause语句,Reduce语句;
步骤18:Filter语句以”filter”为匹配关键字,含有元素result,name,attribute,type和value;
步骤19:Join语句以”join”为匹配关键字,含有元素tableCount,classname,keyname;
步骤110:Deduplicate语句以”deduplicate”为匹配关键字,含有attribute,result,name元素;
步骤111:Generate以”flatmap”或者”map”为匹配关键字,含有元素result,param,包括若干条Expression语句,Expression分为了Assignment,If_expression,Variable,ArithmicExpression语句几类,分别遵守OMG公布的OCL标准;
步骤112:Rduce语句以”reduce”作为匹配关键字,含有元素result和name;
步骤113:StopClause语句以”=”,”;”为匹配关键字,含有元素target_n和target_v。
3.根据权利要求1所述的方法,其特征在于,所述步骤2的具体步骤为:
步骤21:将Domain语句映射生成scala的数据类,Source语句生成输入数据类,加入输入数据解析的方法和输入路径,Target语句生成输出数据类,数据类的存放结构为ArrayList[Any]加入输出数据转化为文本的方法和输出路径,Class语句生成数据类的属性等信息;
步骤22:将Rule语句映射生成scala的一个名为Main的object的主函数,并加入配置SparkConf和SparkContext的语句,并在主函数当中调用输入数据类的输入数据解析方法;
步骤23:将Filter语句生成相应的spark代码,调用RDD的filter方法进行数据处理;
步骤24:将Join语句映射生成相应的spark代码,调用RDD语句先让源数据对应的RDD生成对应的PairFunctionRDD,然后这些PairFunctionRDD调用join方法进行若干次连接,PariFunctionRDD中的ArrayList[Any]调用+=操作进行ArrayList的合并;
步骤25:将Deduplicate语句映射生成相应的spark代码,调用RDD的map方法首先转化成PairFunctionRDD,再调用reduce方法进行去重操作,最后再调用map方法转换回RDD;
步骤26:将Generate语句映射生成相应的spark代码,调用RDD的map或者flatmap方法,在其中新建一个ArrayList[Any],把生成的数据添加到这个结构中;
步骤27:将StopClause语句映射生成最后的赋值语句,赋值给最终结果,并调用输出数据类的输出数据方法,进行输出数据。
4.根据权利要求1中所述的方法,其特征在于,所述步骤3的具体步骤为:
步骤31:对M2S相应的xtext项目右键点击run as EclipseApplication,运行框架,在src文件夹中新建格式为midcore文本文件,输入midcore代码;
步骤32:框架自动生成scala代码,位于src-gen文件夹中;
步骤33:将自动生成的代码放入创建的scala项目中,将Main选定为主类,导出jar包,提交到spark集群即可运行处理数据。
5.根据权利要求1中所述的方法,其特征在于,所述步骤4的具体步骤为:
步骤41:将Rule对应生成Java的Main类和main函数,main函数包括了新创建一个hadoop的job;
步骤42:Domain里的Source和Target语句分别生成主类里面的两个静态方法,即输入数据的解析方法,将读入的文本数据按照格式进行解析,最终返回ArrayList[Object]类型;输出数据的解析方法将ArrayList类型转换按照要求的输出格式成文本进行输出;
步骤43:创建两轮Mapreduce处理过程,分别进行输入和输出操作,其中Map方法调用52中数据输入和输出方法,Reducer不做操作;
步骤44:对于Filter语句,在Hadoop创建一轮mapreduce迭代job,map方法将ArrayList[Object]调用parallelStream()方法转化成Stream再调用filter方法进行数据处理,reduce方法不做操作;
步骤45:对于Join语句,我们新建一轮mapreduce迭代过程job,在map函数中调用parallellStream()方法转化成Stream类型,之后调用map方法抽取出用于匹配的关键字作为key,reduce方法中对key匹配的两个ArrayList调用addAll操作进行合并,完成连接操作;
步骤46:对于Deduplicate语句映射成相应hadoop代码,在hadoop中创建一轮mapreduce过程job,map方法将ArrayList[Object]调用parallelStream()方法转化成Stream再调用Streams中的reduce方法进行数据处理,Reducer中的reduce方法不做操作;
步骤47:对于Generate语句,我们新建一轮hadoop的mapreduce过程,在map函数中调用parallellStream()方法转化成Streams类型,之后调用Streams中的generate方法,创建新的ArrayList,放入我们想生成的数据,reduce过程不做操作;
步骤48:对于reduce语句,我们新建一轮hadoop的mapreduce过程job,mapper类中抽取key,接着为其定义一个reducer,在reduce函数中将Iterable类型转换成Stream类型,然后调用reduce方法进行reduce操作
步骤49:最后添加输出数据的这轮mapreduce过程job,FileInputFormat和FileOutputFormat类添加输入和输出路径,形成完整的hadoop程序。
6.根据权利要求1中所述的方法,其特征在于,所述步骤5的具体步骤为:
步骤51:在M2H相应的xtext项目右击选择run as Eclipse Application选项,运行M2H框架,在src文件夹中新建格式为midcore文本文件,输入midcore代码;
步骤52:框架自动生成java代码,位于src-gen文件夹中;
步骤53:将自动生成的代码放入创建的java项目中,将Main选定为主类,导出jar包,提交到hadoop集群即可运行处理数据。
CN201711418644.2A 2017-12-25 2017-12-25 基于模型转换由midcore生成Spark和Hadoop程序代码的方法 Active CN108153522B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711418644.2A CN108153522B (zh) 2017-12-25 2017-12-25 基于模型转换由midcore生成Spark和Hadoop程序代码的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711418644.2A CN108153522B (zh) 2017-12-25 2017-12-25 基于模型转换由midcore生成Spark和Hadoop程序代码的方法

Publications (2)

Publication Number Publication Date
CN108153522A true CN108153522A (zh) 2018-06-12
CN108153522B CN108153522B (zh) 2020-05-05

Family

ID=62465719

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711418644.2A Active CN108153522B (zh) 2017-12-25 2017-12-25 基于模型转换由midcore生成Spark和Hadoop程序代码的方法

Country Status (1)

Country Link
CN (1) CN108153522B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408051A (zh) * 2018-12-03 2019-03-01 福建省天奕网络科技有限公司 一种识别安卓游戏应用开发引擎的方法及终端
CN111178052A (zh) * 2019-12-20 2020-05-19 中国建设银行股份有限公司 构建机器人流程自动化应用的方法和装置
CN112052012A (zh) * 2020-08-31 2020-12-08 烽火通信科技股份有限公司 基于xslt和xsd的代码自动生成方法和设备
CN112671734A (zh) * 2020-12-16 2021-04-16 中国平安人寿保险股份有限公司 面向多数据源的报文处理方法及其相关设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090150854A1 (en) * 2007-12-05 2009-06-11 Elaasar Maged E Computer Method and Apparatus for Providing Model to Model Transformation Using an MDA Approach
CN102929680A (zh) * 2012-10-19 2013-02-13 普华基础软件股份有限公司 一种将TTCN-3脚本转换为Java源代码的方法,装置和系统
CN104391730A (zh) * 2014-08-03 2015-03-04 浙江网新恒天软件有限公司 一种软件源码语言翻译系统及方法
CN104679511A (zh) * 2015-02-10 2015-06-03 北京系统工程研究所 基于MDE模型转换的MapReduce代码生成方法
CN106843858A (zh) * 2016-12-30 2017-06-13 南京大学 一种由转换原语生成Spark代码的方法
CN106951305A (zh) * 2017-03-24 2017-07-14 南京大学 一种基于模型转换由QVT‑R语言生成midCore脚本的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090150854A1 (en) * 2007-12-05 2009-06-11 Elaasar Maged E Computer Method and Apparatus for Providing Model to Model Transformation Using an MDA Approach
CN102929680A (zh) * 2012-10-19 2013-02-13 普华基础软件股份有限公司 一种将TTCN-3脚本转换为Java源代码的方法,装置和系统
CN104391730A (zh) * 2014-08-03 2015-03-04 浙江网新恒天软件有限公司 一种软件源码语言翻译系统及方法
CN104679511A (zh) * 2015-02-10 2015-06-03 北京系统工程研究所 基于MDE模型转换的MapReduce代码生成方法
CN106843858A (zh) * 2016-12-30 2017-06-13 南京大学 一种由转换原语生成Spark代码的方法
CN106951305A (zh) * 2017-03-24 2017-07-14 南京大学 一种基于模型转换由QVT‑R语言生成midCore脚本的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
葛艳娜: "基于QVT的模型转换方法的研究与应用", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408051A (zh) * 2018-12-03 2019-03-01 福建省天奕网络科技有限公司 一种识别安卓游戏应用开发引擎的方法及终端
CN111178052A (zh) * 2019-12-20 2020-05-19 中国建设银行股份有限公司 构建机器人流程自动化应用的方法和装置
CN112052012A (zh) * 2020-08-31 2020-12-08 烽火通信科技股份有限公司 基于xslt和xsd的代码自动生成方法和设备
CN112052012B (zh) * 2020-08-31 2022-11-11 烽火通信科技股份有限公司 基于xslt和xsd的代码自动生成方法和设备
CN112671734A (zh) * 2020-12-16 2021-04-16 中国平安人寿保险股份有限公司 面向多数据源的报文处理方法及其相关设备
CN112671734B (zh) * 2020-12-16 2023-06-09 中国平安人寿保险股份有限公司 面向多数据源的报文处理方法及其相关设备

Also Published As

Publication number Publication date
CN108153522B (zh) 2020-05-05

Similar Documents

Publication Publication Date Title
US11681877B2 (en) Systems and method for vocabulary management in a natural learning framework
US11520992B2 (en) Hybrid learning system for natural language understanding
CN108153522A (zh) 基于模型转换由midcore生成Spark和Hadoop程序代码的方法
US20140156282A1 (en) Method and system for controlling target applications based upon a natural language command string
US20110035725A9 (en) System and method for automated re-architectureing of legacy systems using object oriented language
CN106648662B (zh) 基于工程造价计算描述语言bcl的报表生成装置及生成方法
Engelen et al. Integrating textual and graphical modelling languages
EP2643755A1 (en) Method and system for displaying selectable autocompletion suggestions and annotations in mapping tool
CN110597959A (zh) 文本信息抽取方法、装置以及电子设备
CN107943691A (zh) 一种自动产生智能合约的功能测试页面的方法及装置
Watanabe A similarity-driven transfer system
CN106095398B (zh) 基于dsl的大数据开发应用方法及装置
CN106383701A (zh) 基于通用多协议数据访问接口技术的数据服务系统
JP2016157407A (ja) テキスト分析及び応答システムのための語彙意味パターンの事前構築方法
CN108874395B (zh) 一种组件化流处理过程中的硬编译方法及装置
CN112015374B (zh) 一种基于自然语言的跨编程语言微服务集成系统
CN106843858B (zh) 一种由转换原语生成Spark代码的方法
JP2021192282A (ja) 深層学習フレームワークにおけるパターン変換方法、装置、電子デバイス、コンピューター記憶媒体およびコンピュータープログラム製品
WO2022231788A1 (en) Code injection from natural language derived intent
CN109828775B (zh) 一种多语言翻译文本内容的web管理系统及方法
CN112527283A (zh) 一种量子计算模拟工具集
CN100361077C (zh) 微编译网格服务构建器的微编译网格服务构建方法
WO2014108776A1 (en) Enterprise decision management
US20240143928A1 (en) Generation of interactive utterances of code tasks
Aladjev et al. Toolbox for the Mathematica programmers

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
GR01 Patent grant
GR01 Patent grant