本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,具體涉及分布式領(lǐng)域,尤其涉及分布式計(jì)算框架和分布式計(jì)算方法。
背景技術(shù):
::在分布式計(jì)算程序的開發(fā)中,用戶可以利用分布式計(jì)算框架提供的接口,例如分布式計(jì)算框架Hive的SQL-like接口、分布式計(jì)算框架Spark的DataFrame接口編寫分布式計(jì)算程序。然而,目前分布式框架提供的接口,一方面,無法實(shí)現(xiàn)算子的復(fù)用。以DataFrame接口為例,需要提供max/min/count等UDF,并且UDF都是處理單機(jī)數(shù)據(jù)集的,無法復(fù)用既有sum/count等操作。字段上可進(jìn)行的操作極其有限,用戶已實(shí)現(xiàn)的算子需要在某字段上使用時(shí),無法復(fù)用算子。另一方面,不便于描述一些分布式計(jì)算中常見的分布式計(jì)算任務(wù)。以SQL-like接口為例,SQL-like接口缺少嵌套數(shù)據(jù)集的概念,當(dāng)處理諸如將數(shù)據(jù)按某個(gè)字段分組,在每個(gè)分組上取某個(gè)字段最大的n條記錄的分布式計(jì)算任務(wù)時(shí),若采用表達(dá)式selectfield_1,field_2fromtable_1groupbyfield1orderbyfield_2desclimit10,實(shí)際上是在全局取出10條記錄,而非每個(gè)分組上取出10條記錄。若采用表達(dá)式selectfield_1,field_2fromtable_1groupbyfield1limit10orderbyfield_2desc,則該表達(dá)式不符合SQL語法,導(dǎo)致無法對(duì)分布式計(jì)算任務(wù)進(jìn)行描述。技術(shù)實(shí)現(xiàn)要素:本申請(qǐng)?zhí)峁┝朔植际接?jì)算框架和分布式計(jì)算方法,用于解決上述
背景技術(shù):
:部分存在的技術(shù)問題。第一方面,本申請(qǐng)?zhí)峁┝朔植际接?jì)算框架,該分布式計(jì)算框架包括:解析單元,用于解析分布式計(jì)算任務(wù)的表達(dá)式,確定算子、算子對(duì)應(yīng)的字段,其中,字段指示算子作用于的分布式數(shù)據(jù)集中的數(shù)據(jù)的屬性;算子單元,用于提供算子,算子的輸入?yún)?shù)包括:字段、字段型分布式數(shù)據(jù)集,其中,字段型分布式數(shù)據(jù)集包含至少一個(gè)元素,元素包含多個(gè)鍵值對(duì),鍵值對(duì)的鍵為字段,值為分布式數(shù)據(jù)集中對(duì)應(yīng)于字段的數(shù)據(jù)。第二方面,本申請(qǐng)?zhí)峁┝朔植际接?jì)算方法,該方法包括:解析分布式計(jì)算任務(wù)的表達(dá)式,確定算子、算子對(duì)應(yīng)的字段,其中,字段指示算子作用于的分布式數(shù)據(jù)集中的數(shù)據(jù)的屬性;生成算子的輸入?yún)?shù),算子的輸入?yún)?shù)包括:字段、字段型分布式數(shù)據(jù)集,其中,字段型分布式數(shù)據(jù)集包含至少一個(gè)元素,元素包含多個(gè)鍵值對(duì),鍵值對(duì)的鍵為字段,值為分布式數(shù)據(jù)集中對(duì)應(yīng)于字段的數(shù)據(jù);算子基于輸入?yún)?shù)進(jìn)行分布式計(jì)算。本申請(qǐng)?zhí)峁┑姆植际接?jì)算框架和分布式計(jì)算方法,通過解析單元,用于解析分布式計(jì)算任務(wù)的表達(dá)式,確定算子、算子對(duì)應(yīng)的字段;算子單元,用于提供算子,算子的輸入?yún)?shù)包括:字段、字段型分布式數(shù)據(jù)集。實(shí)現(xiàn)了任意算子接收和返回的參數(shù)的類型均可以為字段型分布式數(shù)據(jù)集,任意算子均可對(duì)字段型分布式數(shù)據(jù)集中的對(duì)應(yīng)于字段的數(shù)據(jù)進(jìn)行操作。從而,任意算子均需實(shí)現(xiàn)一次,實(shí)現(xiàn)算子的復(fù)用。將分布式計(jì)算任務(wù)以較為簡(jiǎn)單的表達(dá)式顯示地表達(dá)出來,簡(jiǎn)化了用戶利用的分布式計(jì)算框架編寫分布式計(jì)算程序的復(fù)雜度,進(jìn)一步地,可以通過表達(dá)式確定分布式計(jì)算中涉及的算子,從而可以對(duì)分布式計(jì)算過程進(jìn)行優(yōu)化。附圖說明通過閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:圖1示出了根據(jù)本申請(qǐng)的分布式計(jì)算框架的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;圖2示出了根據(jù)本申請(qǐng)的分布式計(jì)算方法的一個(gè)實(shí)施例的流程圖;圖3是適于用來實(shí)現(xiàn)本申請(qǐng)實(shí)施例的分布式計(jì)算框架的計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。具體實(shí)施方式下面結(jié)合附圖和實(shí)施例對(duì)本申請(qǐng)作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋相關(guān)發(fā)明,而非對(duì)該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與有關(guān)發(fā)明相關(guān)的部分。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本申請(qǐng)。請(qǐng)參考圖1,其示出了根據(jù)本申請(qǐng)的分布式計(jì)算框架的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。分布式計(jì)算框架100包括:解析單元101,算子單元102。解析單元101用于解析分布式計(jì)算任務(wù)的表達(dá)式,確定算子、算子對(duì)應(yīng)的字段,其中,字段指示算子作用于的分布式數(shù)據(jù)集中的數(shù)據(jù)的屬性;算子單元102用于提供算子,算子的輸入?yún)?shù)包括:字段、字段型分布式數(shù)據(jù)集,字段型分布式數(shù)據(jù)集包含至少一個(gè)元素,包含多個(gè)鍵值對(duì),鍵值對(duì)的鍵為字段,值為分布式數(shù)據(jù)集中對(duì)應(yīng)于字段的數(shù)據(jù)。在本實(shí)施例中,分布式計(jì)算任務(wù)可以利用表達(dá)式進(jìn)行表示。分布式計(jì)算任務(wù)的表達(dá)式中可以包含各個(gè)算子對(duì)應(yīng)的算子關(guān)鍵字和指示算子作用于的分布式數(shù)據(jù)集中的數(shù)據(jù)的屬性的字段對(duì)應(yīng)的字段關(guān)鍵字。解析單元可以解析表達(dá)式中的算子關(guān)鍵字和字段關(guān)鍵字,確定算子和算子對(duì)應(yīng)的字段。以分布式計(jì)算任務(wù)所需的數(shù)據(jù)為網(wǎng)站的點(diǎn)擊率數(shù)據(jù)為例,網(wǎng)站的點(diǎn)擊率數(shù)據(jù)包含網(wǎng)站數(shù)據(jù)和點(diǎn)擊率數(shù)據(jù)兩部分。算子可以作用于網(wǎng)站數(shù)據(jù)和點(diǎn)擊率數(shù)據(jù)。分布式計(jì)算任務(wù)的表達(dá)式可以包含算子關(guān)鍵字、字段關(guān)鍵字。解析單元可以通過解析分布式計(jì)算任務(wù)的表達(dá)式中的算子關(guān)鍵字和字段關(guān)鍵字,確定算子和算子對(duì)應(yīng)的字段即網(wǎng)站字段、點(diǎn)擊率字段。在本實(shí)施例中,分布式計(jì)算框架可以提供字段型分布式數(shù)據(jù)集SchemaPCollection。數(shù)據(jù)結(jié)構(gòu)PCollection可以表示分布式數(shù)據(jù)集。SchemaPCollection數(shù)據(jù)結(jié)構(gòu)可以表示結(jié)構(gòu)化、帶有字段的PCollection。SchemaPCollection數(shù)據(jù)結(jié)構(gòu)可以相當(dāng)于每個(gè)元素為一個(gè)字典的PCollection。算子單元提供的各個(gè)算子的輸入?yún)?shù)可以包含SchemaPCollection和字段,返回值的類型也可以為SchemaPCollection。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,算子單元包括:字段型分布式數(shù)據(jù)集生成算子,用于根據(jù)字段,將分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的分布式數(shù)據(jù)集轉(zhuǎn)換為字段型分布式數(shù)據(jù)集,字段型分布式數(shù)據(jù)集中的元素包含多個(gè)鍵值對(duì),其中,每一個(gè)鍵值對(duì)的鍵為一個(gè)字段,值為分布式數(shù)據(jù)集中對(duì)應(yīng)于字段的數(shù)據(jù)。以分布式計(jì)算任務(wù)所需的數(shù)據(jù)為網(wǎng)站的點(diǎn)擊率數(shù)據(jù)為例,每一條數(shù)據(jù)包含多個(gè)網(wǎng)站和點(diǎn)擊率兩部分。分布式計(jì)算任務(wù)所需的數(shù)據(jù)可以為PCollection。字段型分布式數(shù)據(jù)集生成算子可以接收字段參數(shù),字段參數(shù)包含網(wǎng)站字段、點(diǎn)擊率字段,生成分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的SchemaPCollection。分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的SchemaPCollection中的每一個(gè)元素可以為一個(gè)字典,該字典由多個(gè)鍵值對(duì),鍵可以為網(wǎng)站集合、點(diǎn)擊率。鍵網(wǎng)站集合對(duì)應(yīng)的值為多個(gè)網(wǎng)站,鍵點(diǎn)擊率對(duì)應(yīng)的值為點(diǎn)擊率數(shù)據(jù)。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,算子單元包括:拼接算子,用于對(duì)字段型分布式數(shù)據(jù)集中的每一個(gè)元素中包含有不同鍵的鍵值對(duì)進(jìn)行組合,得到每一個(gè)元素為包含鍵不同的鍵值對(duì)的字段型分布式數(shù)據(jù)集。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,算子單元包括:分組算子,用于根據(jù)字段型分布式數(shù)據(jù)集中的元素中分組字段指示的鍵對(duì)應(yīng)的值對(duì)字段型分布式數(shù)據(jù)集中的元素進(jìn)行分組,得到多個(gè)分組后的字段型分布式數(shù)據(jù)集,其中,每一個(gè)分組字段指示的鍵對(duì)應(yīng)的值對(duì)應(yīng)一個(gè)分組后的字段型分布式數(shù)據(jù)集,分組后的字段型分布式數(shù)據(jù)集包括至少一個(gè)包含有分組字段指示的鍵對(duì)應(yīng)的值的元素。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,算子單元包括:遍歷算子,用于根據(jù)遍歷字段,對(duì)字段型分布式數(shù)據(jù)集中的所有元素中遍歷字段指示的鍵對(duì)應(yīng)的值執(zhí)行操作。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,聚合算子,用于聚合對(duì)字段型分布式數(shù)據(jù)集中的所有元素中遍歷字段指示的鍵對(duì)應(yīng)的值執(zhí)行操作而得到的結(jié)果。在本實(shí)施例中,算子單元可以包含拼接算子select算子和聚合算子agg算子。分布式計(jì)算框架可以向用戶提供select算子和agg算子對(duì)應(yīng)的select接口和agg接口。可以在select接口和agg接口的基礎(chǔ)上,封裝出輔助接口,例如join接口、distinct接口、sort_by接口。在本實(shí)施例中,通過select接口和agg接口可以對(duì)SchemaPCollection進(jìn)行處理。從而,可以復(fù)用在分布式計(jì)算框架中既有的作用于PCollection上的各種接口,select接口和agg接口可以與任意既有的作用于PCollection上的各種接口進(jìn)行組合,進(jìn)而組成可以完成各種分布式計(jì)算任務(wù)的操作,實(shí)現(xiàn)完備的功能。下面結(jié)合代碼來說明本申請(qǐng)中的分布式計(jì)算框架提供的算子的作用:分布式計(jì)算任務(wù)所需的數(shù)據(jù)為以下網(wǎng)站的點(diǎn)擊率數(shù)據(jù):('alibaba.com,baidu.com,tencent.com',1),('baidu.com,tencent.com',2),('alibaba.com,tencent.com',3),('alibaba.com,baidu.com',2),('alibaba.com,jd.com',1)。分布式計(jì)算任務(wù)為按網(wǎng)站進(jìn)行分組,計(jì)算每個(gè)網(wǎng)站的點(diǎn)擊率的總和、點(diǎn)擊率的最大值、點(diǎn)擊率的平均值??梢杂糜趫?zhí)行上述分布式計(jì)算任務(wù)的部分代碼如下:在本實(shí)施例中,每一個(gè)行代碼可以相當(dāng)于一個(gè)表達(dá)式,用戶可以通過表達(dá)式的形式書寫分布式計(jì)算任務(wù)的代碼。分布式計(jì)算框架可以提供一個(gè)apply語法糖,apply語法糖的語義可以為:.apply(f,*args)等價(jià)于f(pcollection,*args)分布式計(jì)算任務(wù)所需的數(shù)據(jù)('alibaba.com,baidu.com,tencent.com',1),('baidu.com,tencent.com',2),('alibaba.com,tencent.com',3),('alibaba.com,baidu.com',2),('alibaba.com,jd.com',1)為一個(gè)分布式數(shù)據(jù)集PCollection。對(duì)于上述代碼中的.apply(schema.from_tuple,['websites','clicknum']),解析單元可以根據(jù)算子關(guān)鍵字from_tuple,確定字段型分布式數(shù)據(jù)集生成算子。通過字段關(guān)鍵字websites、clicknum,確定字段websites、clicknum。字段型分布式數(shù)據(jù)集生成算子可以根據(jù)字段websites和字段clicknum,將分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的PCollection按照字段websites、clicknum轉(zhuǎn)換為字段型分布式數(shù)據(jù)集SchemaPCollection。SchemaPCollection中包含多個(gè)元素,每一個(gè)元素包含多個(gè)鍵值對(duì),其中,每一個(gè)鍵值對(duì)的鍵為一個(gè)字段,值為PCollection對(duì)應(yīng)于字段的數(shù)據(jù)。轉(zhuǎn)換后的SchemaPCollection包含5個(gè)元素,每一個(gè)元素可以為字典。字典中包含由鍵websites和websites對(duì)應(yīng)的值組成的鍵值對(duì)、由鍵clicknum和clicknum對(duì)應(yīng)的值組成的鍵值對(duì)。第一個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,baidu.com,tencent.com和鍵值對(duì)clicknum-1。第二個(gè)元素中,包含鍵值對(duì)websites-baidu.com,tencent.com和鍵值對(duì)clicknum-2。第三個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,tencent.com和鍵值對(duì)clicknum-3。第四個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,baidu.com和鍵值對(duì)clicknum-2。第五個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,jd.com和鍵值對(duì)clicknum-1。對(duì)于上述代碼中的.apply(schema.select,lambdacols:{'website':cols['websites'].flat_map(lambdaline:line.split(',')),'clicknum':cols['clicknum']}),解析單元可以根據(jù)算子關(guān)鍵字select,確定拼接算子。根據(jù)字段關(guān)鍵字確定字段website、clicknum??梢葬槍?duì)SchemaPCollection中的每一個(gè)元素中的鍵websites,調(diào)用flat_map算子將鍵websites對(duì)應(yīng)的值按照逗號(hào)進(jìn)行拆分,得到由鍵website和鍵website對(duì)應(yīng)的值組成的鍵值對(duì)。在對(duì)鍵websites對(duì)應(yīng)的值按照逗號(hào)進(jìn)行拆分之后,SchemaPCollection中的元素包含由鍵website和鍵website對(duì)應(yīng)的值組成的鍵值對(duì)、由鍵clicknum和鍵clicknum對(duì)應(yīng)的值組成的鍵值對(duì)。第一個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-baidu.com,鍵值對(duì)website-tencent.com,鍵值對(duì)clicknum-1。第二個(gè)元素為鍵值對(duì)website-baidu.com,鍵值對(duì)website-tencent.com,鍵值對(duì)clicknum-2。第三個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-tencent.com,鍵值對(duì)clicknum-3。第四個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-baidu.com,鍵值對(duì)clicknum-2。第五個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-jd.com,鍵值對(duì)clicknum-1。在本實(shí)施例中,拼接算子可以對(duì)字段型分布式數(shù)據(jù)集中的每一個(gè)元素中包含有不同鍵的鍵值對(duì)進(jìn)行組合,得到每一個(gè)元素為包含鍵不同的鍵值對(duì)的字段型分布式數(shù)據(jù)集。拼接算子可以對(duì)每一個(gè)元素中的鍵website對(duì)應(yīng)的鍵值對(duì)和鍵clicknum對(duì)應(yīng)的鍵值對(duì)進(jìn)行組合,得到每一個(gè)元素為包含一個(gè)website對(duì)應(yīng)的鍵值對(duì)和一個(gè)鍵clicknum對(duì)應(yīng)的鍵值對(duì)的SchemaPCollection。在對(duì)每一個(gè)元素中的鍵website對(duì)應(yīng)的鍵值對(duì)和鍵clicknum對(duì)應(yīng)的鍵值對(duì)進(jìn)行組合之后,SchemaPCollection中,第一個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第二個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-1。第三個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-1。第四個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第五個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-2。第六個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-3。第七個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-3。第八個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-2。第九個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第十個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第十一個(gè)元素為鍵值對(duì)website-jd.com和鍵值對(duì)clicknum-1。對(duì)于上述代碼中的.apply(schema.group_by,['website']),解析單元可以根據(jù)分組算子關(guān)鍵字group_by,確定分組算子。根據(jù)字段關(guān)鍵字website確定字段website。在本實(shí)施例中,分組算子可以根據(jù)分組字段website指示的鍵website對(duì)應(yīng)的值對(duì)SchemaPCollection中的元素進(jìn)行分組,得到多個(gè)分組后的SchemaPCollection,每一個(gè)分組字段指示的鍵website對(duì)應(yīng)的值對(duì)應(yīng)一個(gè)分組后的SchemaPCollection,分組后的SchemaPCollection包括至少一個(gè)包含有分組字段指示的鍵website對(duì)應(yīng)的值的元素。分組算子可以聚合鍵website對(duì)應(yīng)的值相同的元素,得到包含多個(gè)鍵website對(duì)應(yīng)的值相同的鍵值對(duì)的分組后的SchemaPCollection。第一個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第二個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-3。第三個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-3、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第四個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-jd.com和鍵值對(duì)clicknum-1。對(duì)于上述代碼中的.apply_values(schema.agg,lambdacols:{'max_click_num':cols['clicknum'].max(),'sum_click_num':cols['clicknum'].flat_map(lambdax:x['x']),'avg_click_num':cols['clicknum'].sum()/cols['clicknum'].count()}),解析單元可以根據(jù)遍歷算子關(guān)鍵字apply_values,確定遍歷算子。根據(jù)字段關(guān)鍵字clicknum,確定字段clicknum。遍歷算子可以根據(jù)遍歷字段clicknum,分別對(duì)每一個(gè)分組后的SchemaPCollection中的所有元素中的鍵clicknum對(duì)應(yīng)的值執(zhí)行max、sum、count操作。從而,可以分別計(jì)算出baidu.com、tencent.com、alibaba.com、jd.com的點(diǎn)擊率最大值、點(diǎn)擊率總和、點(diǎn)擊率平均值。解析單元可以根據(jù)聚合算子關(guān)鍵字agg,確定聚合算子。聚合算子可以聚合對(duì)每一個(gè)分組之后的字段型分布式數(shù)據(jù)集中的所有元素中遍歷字段指示的鍵對(duì)應(yīng)的值執(zhí)行操作而得到的結(jié)果。聚合算子可以聚合對(duì)每一個(gè)分組后的SchemaPCollection中的所有元素中的鍵clicknum對(duì)應(yīng)的值執(zhí)行max、sum、count操作得到的baidu.com、tencent.com、alibaba.com、jd.com的點(diǎn)擊率最大值、點(diǎn)擊率總和、點(diǎn)擊率平均值。在本申請(qǐng)中,任意算子接收和返回的參數(shù)的類型均可以為字段型分布式數(shù)據(jù)集,任意算子均可對(duì)字段型分布式數(shù)據(jù)集中的對(duì)應(yīng)于字段的數(shù)據(jù)進(jìn)行操作。從而,任意算子均需實(shí)現(xiàn)一次,實(shí)現(xiàn)算子的復(fù)用。將分布式計(jì)算任務(wù)以較為簡(jiǎn)單的表達(dá)式顯示地表達(dá)出來,簡(jiǎn)化了用戶利用的分布式計(jì)算框架編寫分布式計(jì)算程序的復(fù)雜度,進(jìn)一步地,可以通過表達(dá)式確定分布式計(jì)算中涉及的算子,從而可以對(duì)分布式計(jì)算過程進(jìn)行優(yōu)化。請(qǐng)參考圖2,其示出了根據(jù)本申請(qǐng)的分布式計(jì)算方法的一個(gè)實(shí)施例的流程200。該方法包括以下步驟:步驟201:解析分布式計(jì)算任務(wù)的表達(dá)式,確定算子、算子對(duì)應(yīng)的字段。在本實(shí)施例中,字段指示算子作用于的分布式數(shù)據(jù)集中的數(shù)據(jù)的屬性。分布式計(jì)算任務(wù)可以利用表達(dá)式進(jìn)行表示。以分布式計(jì)算任務(wù)所需的數(shù)據(jù)為網(wǎng)站的點(diǎn)擊率數(shù)據(jù)為例,網(wǎng)站的點(diǎn)擊率數(shù)據(jù)包含網(wǎng)站數(shù)據(jù)和點(diǎn)擊率數(shù)據(jù)兩部分。算子可以作用于網(wǎng)站數(shù)據(jù)和點(diǎn)擊率數(shù)據(jù)。分布式計(jì)算任務(wù)的表達(dá)式可以包含算子關(guān)鍵字、字段關(guān)鍵字。解析單元可以通過解析分布式計(jì)算任務(wù)的表達(dá)式中的算子關(guān)鍵字和字段關(guān)鍵字,確定算子和算子對(duì)應(yīng)的字段即網(wǎng)站字段、點(diǎn)擊率字段。步驟202:生成算子的輸入?yún)?shù)。在本實(shí)施例中,算子的輸入?yún)?shù)包括:字段、字段型分布式數(shù)據(jù)集,字段型分布式數(shù)據(jù)集包含至少一個(gè)元素,元素包含多個(gè)鍵值對(duì),鍵值對(duì)的鍵為字段,值為分布式數(shù)據(jù)集中對(duì)應(yīng)于字段的數(shù)據(jù)。在本實(shí)施例中,分布式計(jì)算框架可以提供字段型分布式數(shù)據(jù)集SchemaPCollection。數(shù)據(jù)結(jié)構(gòu)PCollection可以表示分布式數(shù)據(jù)集。SchemaPCollection數(shù)據(jù)結(jié)構(gòu)可以表示結(jié)構(gòu)化、帶有字段的PCollection。SchemaPCollection數(shù)據(jù)結(jié)構(gòu)可以相當(dāng)于每個(gè)元素為一個(gè)字典的PCollection。各個(gè)算子的輸入?yún)?shù)可以包含SchemaPCollection和字段,返回值的類型也可以為SchemaPCollection。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,還包括:根據(jù)字段,將分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的分布式數(shù)據(jù)集轉(zhuǎn)換為字段型分布式數(shù)據(jù)集,字段型分布式數(shù)據(jù)集中的元素包含多個(gè)鍵值對(duì),其中,每一個(gè)鍵值對(duì)的鍵為一個(gè)字段,值為分布式數(shù)據(jù)集中對(duì)應(yīng)于字段的數(shù)據(jù)。以分布式計(jì)算任務(wù)所需的數(shù)據(jù)為網(wǎng)站的點(diǎn)擊率數(shù)據(jù)為例,每一條數(shù)據(jù)包含多個(gè)網(wǎng)站和點(diǎn)擊率兩部分。分布式計(jì)算任務(wù)所需的數(shù)據(jù)可以為PCollection??梢愿鶕?jù)網(wǎng)站字段、點(diǎn)擊率字段,生成分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的SchemaPCollection。分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的SchemaPCollection中的每一個(gè)元素可以為一個(gè)字典,該字典由多個(gè)鍵值對(duì),鍵可以為網(wǎng)站集合、點(diǎn)擊率。鍵網(wǎng)站集合對(duì)應(yīng)的值為多個(gè)網(wǎng)站,鍵點(diǎn)擊率對(duì)應(yīng)的值為點(diǎn)擊率數(shù)據(jù)。例如,分布式計(jì)算任務(wù)所需的數(shù)據(jù)為以下網(wǎng)站的點(diǎn)擊率數(shù)據(jù):('alibaba.com,baidu.com,tencent.com',1),('baidu.com,tencent.com',2),('alibaba.com,tencent.com',3),('alibaba.com,baidu.com',2),('alibaba.com,jd.com',1)。分布式計(jì)算任務(wù)所需的數(shù)據(jù)為一個(gè)分布式數(shù)據(jù)集PCollection。在本實(shí)施例中,可以根據(jù)字段websites和字段clicknum,將分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的PCollection按照字段websites、clicknum轉(zhuǎn)換為字段型分布式數(shù)據(jù)集SchemaPCollection。SchemaPCollection中包含多個(gè)元素,每一個(gè)元素包含多個(gè)鍵值對(duì),其中,每一個(gè)鍵值對(duì)的鍵為一個(gè)字段,值為PCollection對(duì)應(yīng)于字段的數(shù)據(jù)。SchemaPCollection包含5個(gè)元素,每一個(gè)元素可以為字典。字典中包含由鍵websites和websites對(duì)應(yīng)的值組成的鍵值對(duì)、由鍵clicknum和clicknum對(duì)應(yīng)的值組成的鍵值對(duì)。第一個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,baidu.com,tencent.com和鍵值對(duì)clicknum-1。第二個(gè)元素中,包含鍵值對(duì)websites-baidu.com,tencent.com和鍵值對(duì)clicknum-2。第三個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,tencent.com和鍵值對(duì)clicknum-3。第四個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,baidu.com和鍵值對(duì)clicknum-2。第五個(gè)元素中,包含鍵值對(duì)websites-alibaba.com,jd.com和鍵值對(duì)clicknum-1。步驟203:算子基于輸入?yún)?shù)進(jìn)行分布式計(jì)算。在本實(shí)施例中,在通過步驟202生成算子的輸入?yún)?shù)之后,算子可以根據(jù)輸入?yún)?shù)SchemaPCollection和字段,進(jìn)行分布式計(jì)算。在本實(shí)施例中,可以提供一個(gè)apply語法糖,apply語法糖的語義可以為:.apply(f,*args)等價(jià)于f(pcollection,*args)在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,還包括:對(duì)字段型分布式數(shù)據(jù)集中的每一個(gè)元素中包含有不同鍵的鍵值對(duì)進(jìn)行組合,得到每一個(gè)元素為包含鍵不同的鍵值對(duì)的字段型分布式數(shù)據(jù)集。在本實(shí)施例中,可以對(duì)字段型分布式數(shù)據(jù)集中的每一個(gè)元素中包含有不同鍵的鍵值對(duì)進(jìn)行組合,得到每一個(gè)元素為包含鍵不同的鍵值對(duì)的字段型分布式數(shù)據(jù)集。以分布式計(jì)算任務(wù)所需的數(shù)據(jù)為網(wǎng)站的點(diǎn)擊率數(shù)據(jù)為例,每一條數(shù)據(jù)包含多個(gè)網(wǎng)站和點(diǎn)擊率兩部分。分布式計(jì)算任務(wù)所需的數(shù)據(jù)可以為PCollection。可以根據(jù)網(wǎng)站字段、點(diǎn)擊率字段,生成分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的SchemaPCollection。分布式計(jì)算任務(wù)所需的數(shù)據(jù)對(duì)應(yīng)的SchemaPCollection中的每一個(gè)元素可以為一個(gè)字典,該字典由多個(gè)鍵值對(duì),鍵可以為網(wǎng)站集合、點(diǎn)擊率。鍵網(wǎng)站集合對(duì)應(yīng)的值為多個(gè)網(wǎng)站,鍵點(diǎn)擊率對(duì)應(yīng)的值為點(diǎn)擊率數(shù)據(jù)。例如,SchemaPCollection中的元素包含由鍵website和鍵website對(duì)應(yīng)的值組成的鍵值對(duì)、由鍵clicknum和鍵clicknum對(duì)應(yīng)的值組成的鍵值對(duì)。第一個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-baidu.com,鍵值對(duì)website-tencent.com,鍵值對(duì)clicknum-1。第二個(gè)元素為鍵值對(duì)website-baidu.com,鍵值對(duì)website-tencent.com,鍵值對(duì)clicknum-2。第三個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-tencent.com,鍵值對(duì)clicknum-3。第四個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-baidu.com,鍵值對(duì)clicknum-2。第五個(gè)元素為鍵值對(duì)website-alibaba.com,鍵值對(duì)website-jd.com,鍵值對(duì)clicknum-1??梢詫?duì)每一個(gè)元素中的鍵website對(duì)應(yīng)的鍵值對(duì)和鍵clicknum對(duì)應(yīng)的鍵值對(duì)進(jìn)行組合,得到每一個(gè)元素為包含一個(gè)website對(duì)應(yīng)的鍵值對(duì)和一個(gè)鍵clicknum對(duì)應(yīng)的鍵值對(duì)的SchemaPCollection。在對(duì)每一個(gè)元素中的鍵website對(duì)應(yīng)的鍵值對(duì)和鍵clicknum對(duì)應(yīng)的鍵值對(duì)進(jìn)行組合之后,SchemaPCollection中,第一個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第二個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-1。第三個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-1。第四個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第五個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-2。第六個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-3。第七個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-3。第八個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-2。第九個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第十個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第十一個(gè)元素為鍵值對(duì)website-jd.com和鍵值對(duì)clicknum-1。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,還包括:根據(jù)字段型分布式數(shù)據(jù)集中的元素中分組字段指示的鍵對(duì)應(yīng)的值對(duì)字段型分布式數(shù)據(jù)集中的元素進(jìn)行分組,得到多個(gè)分組后的字段型分布式數(shù)據(jù)集,其中,每一個(gè)分組字段指示的鍵對(duì)應(yīng)的值對(duì)應(yīng)一個(gè)分組后的字段型分布式數(shù)據(jù)集,分組后的字段型分布式數(shù)據(jù)集包括至少一個(gè)包含有分組字段指示的鍵對(duì)應(yīng)的值的元素。例如,在SchemaPCollection中,第一個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第二個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-1。第三個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-1。第四個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第五個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-2。第六個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-3。第七個(gè)元素為鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-3。第八個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-2。第九個(gè)元素為鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第十個(gè)元素為鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第十一個(gè)元素為鍵值對(duì)website-jd.com和鍵值對(duì)clicknum-1??梢愿鶕?jù)分組字段website,按照元素中website指示的鍵website對(duì)應(yīng)的值對(duì)SchemaPCollection中的元素進(jìn)行分組,得到多個(gè)分組后的SchemaPCollection,每一個(gè)分組字段指示的鍵website對(duì)應(yīng)的值對(duì)應(yīng)一個(gè)分組后的SchemaPCollection,分組后的SchemaPCollection包括至少一個(gè)包含有分組字段指示的鍵website對(duì)應(yīng)的值的元素??梢跃酆蟂chemaPCollection中鍵website對(duì)應(yīng)的值相同的元素,得到包含多個(gè)鍵website對(duì)應(yīng)的值相同的鍵值對(duì)的分組后的SchemaPCollection。第一個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第二個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-3。第三個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-3、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第四個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-jd.com和鍵值對(duì)clicknum-1。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,還包括:根據(jù)遍歷字段,對(duì)字段型分布式數(shù)據(jù)集中的所有元素中遍歷字段指示的鍵對(duì)應(yīng)的值執(zhí)行操作。以根據(jù)分組字段website,按照元素中website指示的鍵website對(duì)應(yīng)的值對(duì)SchemaPCollection中的元素進(jìn)行分組,得到多個(gè)分組后的SchemaPCollection為例,第一個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-baidu.com和鍵值對(duì)clicknum-2。第二個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-tencent.com和鍵值對(duì)clicknum-3。第三個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-3、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-2、鍵值對(duì)website-alibaba.com和鍵值對(duì)clicknum-1。第四個(gè)分組后的SchemaPCollection中,包含鍵值對(duì)website-jd.com和鍵值對(duì)clicknum-1??梢愿鶕?jù)遍歷字段clicknum,分別對(duì)每一個(gè)分組后的SchemaPCollection中的所有元素中的鍵clicknum對(duì)應(yīng)的值執(zhí)行max、sum、count操作。從而,可以分別計(jì)算出baidu.com、tencent.com、alibaba.com、jd.com的點(diǎn)擊率最大值、點(diǎn)擊率總和、點(diǎn)擊率平均值。在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,還包括:聚合對(duì)字段型分布式數(shù)據(jù)集中的所有元素中遍歷字段指示的鍵對(duì)應(yīng)的值執(zhí)行操作而得到的結(jié)果。以分組后的SchemaPCollection為例,可以聚合對(duì)每一個(gè)分組后的SchemaPCollection中的所有元素中的鍵clicknum對(duì)應(yīng)的值執(zhí)行max、sum、count操作得到的baidu.com、tencent.com、alibaba.com、jd.com的點(diǎn)擊率最大值、點(diǎn)擊率總和、點(diǎn)擊率平均值。輸出結(jié)果可以采用以下形式進(jìn)行表示:[{'sum_click_num':7,'website':'alibaba.com','avg_click_num':1,'max_click_num':3},{'sum_click_num':6,'website':'tencent.com','avg_click_num':2,'max_click_num':3},{'sum_click_num':5,'website':'baidu.com','avg_click_num':1,'max_click_num':2},{'sum_click_num':1,'website':'jd.com','avg_click_num':1,'max_click_num':1}]。在本申請(qǐng)中,任意算子接收和返回的參數(shù)的類型均可以為字段型分布式數(shù)據(jù)集,任意算子均可對(duì)字段型分布式數(shù)據(jù)集中的對(duì)應(yīng)于字段的數(shù)據(jù)進(jìn)行操作。從而,任意算子均需實(shí)現(xiàn)一次,實(shí)現(xiàn)算子的復(fù)用。將分布式計(jì)算任務(wù)以較為簡(jiǎn)單的表達(dá)式顯示地表達(dá)出來,簡(jiǎn)化了用戶利用的分布式計(jì)算框架編寫分布式計(jì)算程序的復(fù)雜度,進(jìn)一步地,可以通過表達(dá)式確定分布式計(jì)算中涉及的算子,從而可以對(duì)分布式計(jì)算過程進(jìn)行優(yōu)化。下面參考圖3,其示出了適于用來實(shí)現(xiàn)本申請(qǐng)實(shí)施例的分布式計(jì)算框架的計(jì)算機(jī)系統(tǒng)300的結(jié)構(gòu)示意圖。如圖3所示,計(jì)算機(jī)系統(tǒng)300包括中央處理單元(CPU)301,其可以根據(jù)存儲(chǔ)在只讀存儲(chǔ)器(ROM)302中的程序或者從存儲(chǔ)部分308加載到隨機(jī)訪問存儲(chǔ)器(RAM)303中的程序而執(zhí)行各種適當(dāng)?shù)膭?dòng)作和處理。在RAM303中,還存儲(chǔ)有系統(tǒng)300操作所需的各種程序和數(shù)據(jù)。CPU301、ROM302以及RAM303通過總線304彼此相連。輸入/輸出(I/O)接口305也連接至總線304。以下部件連接至I/O接口305:包括鍵盤、鼠標(biāo)等的輸入部分306;包括諸如陰極射線管(CRT)、液晶顯示器(LCD)等以及揚(yáng)聲器等的輸出部分307;包括硬盤等的存儲(chǔ)部分308;以及包括諸如LAN卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分309。通信部分309經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動(dòng)器310也根據(jù)需要連接至I/O接口305??刹鹦督橘|(zhì)311,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲(chǔ)器等等,根據(jù)需要安裝在驅(qū)動(dòng)器310上,以便于從其上讀出的計(jì)算機(jī)程序根據(jù)需要被安裝入存儲(chǔ)部分308。特別地,根據(jù)本公開的實(shí)施例,上文參考流程圖描述的過程可以被實(shí)現(xiàn)為計(jì)算機(jī)軟件程序。例如,本公開的實(shí)施例包括一種計(jì)算機(jī)程序產(chǎn)品,其包括有形地包含在機(jī)器可讀介質(zhì)上的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實(shí)施例中,該計(jì)算機(jī)程序可以通過通信部分309從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)311被安裝。附圖中的流程圖和框圖,圖示了按照本申請(qǐng)各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。作為另一方面,本申請(qǐng)還提供了一種非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì),該非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是上述實(shí)施例中所述裝置中所包含的非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì);也可以是單獨(dú)存在,未裝配入終端中的非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。上述非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有一個(gè)或者多個(gè)程序,當(dāng)所述一個(gè)或者多個(gè)程序被一個(gè)設(shè)備執(zhí)行時(shí),使得所述設(shè)備:解析分布式計(jì)算任務(wù)的表達(dá)式,確定算子、所述算子對(duì)應(yīng)的字段,其中,所述字段指示算子作用于的分布式數(shù)據(jù)集中的數(shù)據(jù)的屬性;生成所述算子的輸入?yún)?shù),算子的輸入?yún)?shù)包括:字段、字段型分布式數(shù)據(jù)集,其中,所述字段型分布式數(shù)據(jù)集包含至少一個(gè)元素,所述元素包含多個(gè)鍵值對(duì),鍵值對(duì)的鍵為字段,值為分布式數(shù)據(jù)集中對(duì)應(yīng)于所述字段的數(shù)據(jù);所述算子基于所述輸入?yún)?shù)進(jìn)行分布式計(jì)算。以上描述僅為本申請(qǐng)的較佳實(shí)施例以及對(duì)所運(yùn)用技術(shù)原理的說明。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,本申請(qǐng)中所涉及的發(fā)明范圍,并不限于上述技術(shù)特征的特定組合而成的技術(shù)方案,同時(shí)也應(yīng)涵蓋在不脫離所述發(fā)明構(gòu)思的情況下,由上述技術(shù)特征或其等同特征進(jìn)行任意組合而形成的其它技術(shù)方案。例如上述特征與本申請(qǐng)中公開的(但不限于)具有類似功能的技術(shù)特征進(jìn)行互相替換而形成的技術(shù)方案。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3