1.一種由轉(zhuǎn)換原語(yǔ)生成Spark代碼的方法,其特征在于:包括步驟:
步驟10:設(shè)計(jì)表示數(shù)據(jù)模型變換的轉(zhuǎn)換原語(yǔ)文法;
步驟11:輸入數(shù)據(jù)變換的原語(yǔ)文件;原語(yǔ)文件是根據(jù)步驟10設(shè)計(jì)的轉(zhuǎn)換原語(yǔ)文法設(shè)計(jì)的,包含輸入數(shù)據(jù)模型,輸出數(shù)據(jù)模型和轉(zhuǎn)換規(guī)則的信息;
步驟12:利用Xtext對(duì)步驟11設(shè)計(jì)的原語(yǔ)文件進(jìn)行語(yǔ)法分析,并得到語(yǔ)法分析樹(shù);
步驟13:利用Xtend根據(jù)步驟12得到的語(yǔ)法分析樹(shù)對(duì)原語(yǔ)文件進(jìn)行語(yǔ)義轉(zhuǎn)換,生成對(duì)應(yīng)的Spark代碼。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟10的設(shè)計(jì)過(guò)程包括:
步驟20:規(guī)定轉(zhuǎn)換控制層原語(yǔ)ExecuteTransformation用來(lái)控制整個(gè)模型轉(zhuǎn)換的執(zhí)行,調(diào)度ExecuteRule原語(yǔ);
步驟21:規(guī)定轉(zhuǎn)換控制層原語(yǔ)ExecuteRule用來(lái)控制一條規(guī)則的執(zhí)行,調(diào)度執(zhí)行層原語(yǔ);
步驟22:規(guī)定執(zhí)行層原語(yǔ)MatchPattern根據(jù)輸入模式在模型中進(jìn)行匹配,得到需轉(zhuǎn)換的輸入模型片段;
步驟23:規(guī)定執(zhí)行層原語(yǔ)MatchObject根據(jù)某些指定條件,去查找滿足條件的匹配對(duì)象;
步驟24:規(guī)定執(zhí)行層原語(yǔ)CreateObject來(lái)創(chuàng)建模型對(duì)象元素;
步驟25:規(guī)定執(zhí)行層原語(yǔ)CreateReference來(lái)創(chuàng)建模型關(guān)系元素;
步驟26:規(guī)定表達(dá)式計(jì)算曾原語(yǔ)EvaluateExpression用于進(jìn)行復(fù)雜表達(dá)式計(jì)算。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟11中設(shè)計(jì)原語(yǔ)文件的過(guò)程包括:
步驟30:打開(kāi)eclipse創(chuàng)建原語(yǔ)xml文件;
步驟31:右鍵點(diǎn)擊添加ExecuteTransformation節(jié)點(diǎn);
步驟32:右鍵點(diǎn)擊ExecuteTransformation節(jié)點(diǎn)添加Domain節(jié)點(diǎn),并設(shè)置屬性為input_type;
步驟33:右鍵點(diǎn)擊Domain節(jié)點(diǎn),添加兩個(gè)inputFile節(jié)點(diǎn),存放要進(jìn)行轉(zhuǎn)換的輸入文件信息;
步驟34:右鍵點(diǎn)擊ExecuteTransformation節(jié)點(diǎn)添加Domain節(jié)點(diǎn),并設(shè)置屬性為output_type;
步驟35:右鍵點(diǎn)擊Domain節(jié)點(diǎn),添加一個(gè)outputFile節(jié)點(diǎn),存放轉(zhuǎn)換后的輸出文件信息;
步驟36:右鍵點(diǎn)擊ExecuteTransformation節(jié)點(diǎn)添加ExcuteRule節(jié)點(diǎn);
步驟37:右鍵點(diǎn)擊ExecuteRule節(jié)點(diǎn),添加兩個(gè)MatchType和一個(gè)joinKey節(jié)點(diǎn),在該兩個(gè)節(jié)點(diǎn)里添加具體的數(shù)據(jù)轉(zhuǎn)換操作的規(guī)則設(shè)計(jì);結(jié)束本次原語(yǔ)文件的設(shè)計(jì)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟12的過(guò)程包括:
步驟40:根據(jù)Xtext基本語(yǔ)法,匹配原語(yǔ)文件的書(shū)寫(xiě)格式;
步驟41:利用正則表達(dá)式描述來(lái)匹配代碼的基本語(yǔ)句;
步驟42:設(shè)計(jì)ExecuteTransformation語(yǔ)句格式,在ExecuteTransformation的語(yǔ)句加入若干條Domain_input,Domain_output,ExecuteRule語(yǔ)句;
步驟43:設(shè)計(jì)Domain_input語(yǔ)句格式,在Domain_input的語(yǔ)句中插入多條InputFile語(yǔ)句,在InputFile語(yǔ)句中存放要轉(zhuǎn)換文件的配置信息;
步驟44:設(shè)計(jì)Domain_output語(yǔ)句格式,在Domain_output的語(yǔ)句中插入多條OutputData語(yǔ)句,在OutputData語(yǔ)句中存放轉(zhuǎn)換后文件的配置信息;
步驟45:設(shè)計(jì)ExecuteRule語(yǔ)句格式,在ExecuteRule的語(yǔ)句中插入多條轉(zhuǎn)換規(guī)則語(yǔ)句;
步驟46:設(shè)計(jì)具體轉(zhuǎn)換規(guī)則的語(yǔ)句格式。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟13的實(shí)現(xiàn)過(guò)程:
步驟50:將原語(yǔ)ExucuteTranformation轉(zhuǎn)化為Spark程序的執(zhí)行入口,且調(diào)用輸入模型和輸出模型的靜態(tài)方法實(shí)現(xiàn)輸入輸出;
步驟51:將原語(yǔ)Domain_input和Domain_output轉(zhuǎn)化為對(duì)應(yīng)輸入和輸出數(shù)據(jù)模型的類文件;
步驟52:原語(yǔ)ExucuteRule對(duì)應(yīng)spark平臺(tái)上對(duì)RDD的操作集合,組成ExucuteRule的原語(yǔ)分別對(duì)應(yīng)spark平臺(tái)上的具體操作;
步驟53:將原語(yǔ)MatchType中的name屬性對(duì)應(yīng)Spark中RDD的創(chuàng)建;
步驟54:將原語(yǔ)Filter對(duì)MatchType對(duì)應(yīng)的RDD進(jìn)行原語(yǔ)Filter定義的過(guò)濾操作,調(diào)用RDD的Filter函數(shù);
步驟55:將原語(yǔ)Statistics對(duì)MatchType對(duì)應(yīng)的RDD進(jìn)行原語(yǔ)Statistics定義的統(tǒng)計(jì)操作;
步驟56:將原語(yǔ)JoinKey對(duì)spark平臺(tái)上的兩個(gè)RDD的連接操作,提取關(guān)鍵值,分別生成一個(gè)PairRDDFunctions,再進(jìn)行連接。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟13中執(zhí)行Spark代碼轉(zhuǎn)換過(guò)程如下:
步驟60:在Xtext生成的原語(yǔ)編輯器中,src文件夾加入步驟11設(shè)計(jì)的原語(yǔ)文件;
步驟61:運(yùn)行Xtend生成的轉(zhuǎn)換規(guī)則;
步驟62:在src-gen文件夾中會(huì)看到具有數(shù)據(jù)轉(zhuǎn)換功能的scala文件;完成Spark代碼的生成。