欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

字符流格式轉(zhuǎn)換的方法和裝置與流程

文檔序號:11514855閱讀:382來源:國知局
本發(fā)明涉及計算機
技術(shù)領(lǐng)域
:,特別地涉及一種字符流格式轉(zhuǎn)換的方法和裝置。
背景技術(shù)
::隨著數(shù)據(jù)量的增大,數(shù)據(jù)批處理的需求也在逐步增加。目前,主流的可以進行快速數(shù)據(jù)分析的大數(shù)據(jù)查詢引擎例如:impala、shark、stinger和presto等,一般都不支持?jǐn)?shù)據(jù)存儲。為了進行海量數(shù)據(jù)的快速分析,可以先將數(shù)據(jù)轉(zhuǎn)換處理并存儲到數(shù)據(jù)倉庫中,之后使用大數(shù)據(jù)查詢引擎從數(shù)據(jù)倉庫中讀取數(shù)據(jù)并進行快速的數(shù)據(jù)分析。hive作為一款基于hadoop的數(shù)據(jù)倉庫工具,它可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,能將通用的sql語句轉(zhuǎn)換為mapreduce任務(wù)運行,并且其數(shù)據(jù)存儲在hadoop分布式文件系統(tǒng)hdfs(hadoopdistributedfilesystem)上,完美解決了海量數(shù)據(jù)存儲的問題。因此hive數(shù)據(jù)倉庫在數(shù)據(jù)存儲方面得到了廣泛應(yīng)用。目前,hive中數(shù)據(jù)的存儲格式例如textfile、sequencefile、rcfile、orcfile(optimizedrowcolumnarfile)等等。其中,orc格式可以高效地存儲hive數(shù)據(jù),并可以規(guī)避其他文件格式存在的缺陷,使用orc文件格式可以提升hive讀、寫與處理數(shù)據(jù)的性能。尤其是,一些數(shù)據(jù)查詢引擎,例如presto,其針對優(yōu)化行列文件orcfile格式hive表的查詢做了大量優(yōu)化,因此presto對orc格式文件的查詢性能和穩(wěn)定性都遠(yuǎn)高于其他格式的數(shù)據(jù)表。然而,初始的用戶數(shù)據(jù)多以非orc的格式存在,因此將用戶數(shù)據(jù)轉(zhuǎn)換成orc格式的數(shù)據(jù)成為一個必不可少的步驟。目前通用的將用戶數(shù)據(jù)轉(zhuǎn)換成orc格式數(shù)據(jù)的流程如圖1所示,主要過程如下:1、通過編寫一個map/reduce應(yīng)用程序,將用戶數(shù)據(jù)讀取成字符流,并將字符流存儲為txt格式的文本文件;2、新建兩個字段相同的hive表tablea_txt和tablea_orc用于存儲讀取的字符流,其中tablea_txt種數(shù)據(jù)存儲格式為文本文件txt,tablea_orc中數(shù)據(jù)存儲格式為優(yōu)化行列文件orc;3、先將txt文件直接保存到tablea_txt,然后通過設(shè)置篩選條件,將剛才保存到tablea_txt的數(shù)據(jù)插入到tablea_orc中,完成整個數(shù)據(jù)的轉(zhuǎn)換操作。在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)存在如下技術(shù)問題:1、現(xiàn)有技術(shù)方案的過程比較冗長,自動化難度高,且將用戶數(shù)據(jù)讀取成字符流之后的操作需要有開發(fā)人員介入,效率較低;2、在進行數(shù)據(jù)格式轉(zhuǎn)換的過程中會有臨時的txt文件產(chǎn)生,并且需要提前建立兩個表,而最終數(shù)據(jù)查詢引擎使用的只有一個表,因此浪費了存儲空間。技術(shù)實現(xiàn)要素:有鑒于此,本發(fā)明實施例提供一種字符流格式轉(zhuǎn)換的方法和裝置,能夠提高業(yè)務(wù)數(shù)據(jù)字符流轉(zhuǎn)換成orc格式數(shù)據(jù)流的效率,提升了存儲空間的利用率,節(jié)省了存儲空間。為實現(xiàn)上述目的,根據(jù)本發(fā)明實施例的一個方面,提供了一種字符流格式轉(zhuǎn)換的方法。一種字符流格式轉(zhuǎn)換的方法,包括:獲取字符流和對應(yīng)的轉(zhuǎn)換模板,其中,所述轉(zhuǎn)換模板定義了所述字符流格式轉(zhuǎn)換的對應(yīng)結(jié)構(gòu),且所述轉(zhuǎn)換模板根據(jù)所述對應(yīng)結(jié)構(gòu)中包含的字段的名稱和類型來定義;根據(jù)所述轉(zhuǎn)換模板,將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流。可選地,將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流的步驟包括:遍歷獲取的所述字符流,按照所述轉(zhuǎn)換模板中定義的字段順序,依次存入鏈表中;利用對應(yīng)的序列化函數(shù)將所述鏈表中保存的所述字符流序列化成所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流??蛇x地,所述對應(yīng)結(jié)構(gòu)是orc格式的結(jié)構(gòu)??蛇x地,所述轉(zhuǎn)換模板包括以“struct<>”包裹的字符串,且所述字符串順序地包含所述對應(yīng)結(jié)構(gòu)的每個字段的名稱和類型??蛇x地,若所述業(yè)務(wù)數(shù)據(jù)為文本文件,則利用map/reduce的文本讀取方式,將所述文本文件讀取為字符流。可選地,若所述業(yè)務(wù)數(shù)據(jù)為數(shù)據(jù)庫文件,則通過map/reduce程序調(diào)用所述數(shù)據(jù)庫提供的數(shù)據(jù)庫連接接口逐行讀取所述數(shù)據(jù)庫中的數(shù)據(jù),并輸出成字符流??蛇x地,若所述業(yè)務(wù)數(shù)據(jù)為kafka消息系統(tǒng)中存儲的文件,則以所述kafka消息系統(tǒng)的每個分區(qū)作為處理單元,通過map/reduce程序調(diào)用所述kafka消息系統(tǒng)的消息讀取接口,并行地讀取所述每個分區(qū)的數(shù)據(jù)并輸出成字符流??蛇x地,將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流的步驟之后,還包括:將所述數(shù)據(jù)流保存到對應(yīng)的存儲目錄。根據(jù)本發(fā)明實施例的另一方面,提供了一種字符流格式轉(zhuǎn)換的裝置。一種字符流格式轉(zhuǎn)換的裝置,包括:數(shù)據(jù)獲取模塊,用于獲取字符流和對應(yīng)的轉(zhuǎn)換模板,其中,所述轉(zhuǎn)換模板定義了所述字符流格式轉(zhuǎn)換的對應(yīng)結(jié)構(gòu),且所述轉(zhuǎn)換模板根據(jù)所述對應(yīng)結(jié)構(gòu)中包含的字段的名稱和類型來定義;數(shù)據(jù)轉(zhuǎn)換模塊,用于根據(jù)所述轉(zhuǎn)換模板,將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流??蛇x地,所述數(shù)據(jù)轉(zhuǎn)換模塊還用于:遍歷獲取的所述字符流,按照所述轉(zhuǎn)換模板中定義的字段順序,依次存入鏈表中;利用對應(yīng)的序列化函數(shù)將所述鏈表中保存的所述字符流序列化成所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流。可選地,所述對應(yīng)結(jié)構(gòu)是orc格式的結(jié)構(gòu)??蛇x地,所述轉(zhuǎn)換模板包括以“struct<>”包裹的字符串,且所述字符串順序地包含所述對應(yīng)結(jié)構(gòu)的每個字段的名稱和類型??蛇x地,若所述業(yè)務(wù)數(shù)據(jù)為文本文件,則利用map/reduce的文本讀取方式,將所述文本文件讀取為字符流??蛇x地,若所述業(yè)務(wù)數(shù)據(jù)為數(shù)據(jù)庫文件,則通過map/reduce程序調(diào)用所述數(shù)據(jù)庫提供的數(shù)據(jù)庫連接接口逐行讀取所述數(shù)據(jù)庫中的數(shù)據(jù),并輸出成字符流。可選地,若所述業(yè)務(wù)數(shù)據(jù)為kafka消息系統(tǒng)中存儲的文件,則以所述kafka消息系統(tǒng)的每個分區(qū)作為處理單元,通過map/reduce程序調(diào)用所述kafka消息系統(tǒng)的消息讀取接口,并行地讀取所述每個分區(qū)的數(shù)據(jù)并輸出成字符流??蛇x地,還包括數(shù)據(jù)保存模塊,用于:在將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流之后,將所述數(shù)據(jù)流保存到對應(yīng)的存儲目錄。根據(jù)本發(fā)明實施例的又一方面,提供了一種字符流格式轉(zhuǎn)換的終端設(shè)備。一種字符流格式轉(zhuǎn)換的終端設(shè)備,包括:一個或多個處理器;存儲裝置,用于存儲一個或多個程序,當(dāng)所述一個或多個程序被所述一個或多個處理器執(zhí)行,使得所述一個或多個處理器實現(xiàn)本發(fā)明所提供的字符流格式轉(zhuǎn)換的方法。根據(jù)本發(fā)明實施例的再一方面,提供了一種計算機可讀介質(zhì)。一種計算機可讀介質(zhì),其上存儲有計算機程序,所述程序被處理器執(zhí)行時實現(xiàn)本發(fā)明所提供的字符流格式轉(zhuǎn)換的方法。上述發(fā)明中的一個實施例具有如下優(yōu)點或有益效果:通過map/reduce程序?qū)I(yè)務(wù)數(shù)據(jù)對應(yīng)的字符流根據(jù)定義的轉(zhuǎn)換模版進行格式轉(zhuǎn)換,可以簡化將字符流轉(zhuǎn)化成orc格式數(shù)據(jù)流的過程,從而極大的提高了業(yè)務(wù)數(shù)據(jù)轉(zhuǎn)換成orc格式hive表數(shù)據(jù)的效率,降低了人工參與導(dǎo)致錯誤的風(fēng)險;另外,在字符流格式轉(zhuǎn)換過程中,不會產(chǎn)生多余的臨時數(shù)據(jù),直接存儲為orc格式的hive表數(shù)據(jù),從而提升了存儲空間的利用率,節(jié)省了存儲空間。上述的非慣用的可選方式所具有的進一步效果將在下文中結(jié)合具體實施方式加以說明。附圖說明附圖用于更好地理解本發(fā)明,不構(gòu)成對本發(fā)明的不當(dāng)限定。其中:圖1是現(xiàn)有的將用戶數(shù)據(jù)轉(zhuǎn)換成orc格式數(shù)據(jù)的流程示意圖;圖2是根據(jù)本發(fā)明實施例的字符流格式轉(zhuǎn)換的方法的主要步驟示意圖;圖3是根據(jù)本發(fā)明一個實施例的字符流獲取過程示意圖;圖4是根據(jù)本發(fā)明另一個實施例的字符流獲取過程示意圖;圖5是根據(jù)本發(fā)明又一個實施例的字符流獲取過程示意圖;圖6是根據(jù)本發(fā)明實施例的字符流轉(zhuǎn)換過程示意圖;圖7是根據(jù)本發(fā)明實施例的字符流格式轉(zhuǎn)換的裝置的主要模塊示意圖;圖8是本發(fā)明實施例可以應(yīng)用于其中的示例性系統(tǒng)架構(gòu)圖;圖9是適于用來實現(xiàn)本發(fā)明實施例的終端設(shè)備的計算機系統(tǒng)900的結(jié)構(gòu)示意圖。具體實施方式以下結(jié)合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā)明實施例的各種細(xì)節(jié)以助于理解,應(yīng)當(dāng)將它們認(rèn)為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認(rèn)識到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結(jié)構(gòu)的描述。為了簡化將字符流轉(zhuǎn)換成orc格式hive表數(shù)據(jù)的過程,并同時實現(xiàn)轉(zhuǎn)換過程的自動化執(zhí)行,本發(fā)明通過map/reduce程序來執(zhí)行業(yè)務(wù)數(shù)據(jù)的讀取和orc格式的轉(zhuǎn)換。圖2是根據(jù)本發(fā)明實施例的字符流格式轉(zhuǎn)換的方法的主要步驟示意圖。如圖2所示,本發(fā)明的字符流格式轉(zhuǎn)換的方法主要包括如下的步驟s21至步驟s22。步驟s21:獲取字符流和對應(yīng)的轉(zhuǎn)換模板,其中,轉(zhuǎn)換模板定義了字符流格式轉(zhuǎn)換的對應(yīng)結(jié)構(gòu),且轉(zhuǎn)換模板根據(jù)對應(yīng)結(jié)構(gòu)中包含的字段的名稱和類型來定義。業(yè)務(wù)數(shù)據(jù)的來源通常多種多樣,包括普通的文本文件,傳統(tǒng)的數(shù)據(jù)庫(如mysql、oracle、sqlserver等),以及例如kafka的高吞吐、分布式、基于發(fā)布訂閱的消息系統(tǒng)。對于不同來源的業(yè)務(wù)數(shù)據(jù),采用不同的方法將業(yè)務(wù)數(shù)據(jù)讀取為字符流。若業(yè)務(wù)數(shù)據(jù)為文本文件,則利用map/reduce的文本讀取方式,將文本文件讀取為字符流。若業(yè)務(wù)數(shù)據(jù)為數(shù)據(jù)庫文件,則通過map/reduce程序調(diào)用數(shù)據(jù)庫提供的數(shù)據(jù)庫連接接口逐行讀取數(shù)據(jù)庫中的數(shù)據(jù),并輸出成字符流。若業(yè)務(wù)數(shù)據(jù)為kafka消息系統(tǒng)中存儲的文件,則以kafka消息系統(tǒng)的每個分區(qū)作為處理單元,通過map/reduce程序調(diào)用kafka消息系統(tǒng)的消息讀取接口,并行地讀取每個分區(qū)的數(shù)據(jù)并輸出成字符流。以個人信息表person為例,該表的結(jié)構(gòu)如表1所示。表1字段名稱數(shù)據(jù)類型說明idint(整型)id號namestring(字符型)名稱scoreint(整型)分?jǐn)?shù)birthstring(字符型)出生年月個人信息表person中保存的數(shù)據(jù)內(nèi)容例如表2所示。表2idnamescorebirth1zhangsan861988-012lisi991988-083wangwu721988-01下面分別以普通文本、傳統(tǒng)數(shù)據(jù)庫、kafka為數(shù)據(jù)來源介紹字符流的獲取過程。圖3是根據(jù)本發(fā)明一個實施例的字符流獲取過程示意圖。如圖3所示,對于普通的文本文件,可以利用map/reduce的文本讀取方式,直接將這些文件讀取為字符流。圖4是根據(jù)本發(fā)明另一個實施例的字符流獲取過程示意圖。對于傳統(tǒng)的數(shù)據(jù)庫,可以根據(jù)其提供的jdbc接口,通過map/reduce程序直接調(diào)用這些jdbc接口來逐行讀取數(shù)據(jù)庫中的數(shù)據(jù),并輸出成字符流。圖5是根據(jù)本發(fā)明又一個實施例的字符流獲取過程示意圖。對于kafka消息系統(tǒng),讀取稍微復(fù)雜一些,kafka的每個主題topic相當(dāng)于傳統(tǒng)數(shù)據(jù)庫中的一個表,主題topic下的每個消息message都相當(dāng)于傳統(tǒng)數(shù)據(jù)庫表中的一行數(shù)據(jù),這些消息message會根據(jù)某個或某幾個字段的不同而被區(qū)分到不同的分區(qū)partition中,kafka本身提供了讀取這些消息message的消費接口,為了高效地將這些消息message轉(zhuǎn)換成字符流,可以每個分區(qū)partition作為處理單元,通過map/reduce程序來調(diào)用kafka的消費接口,并行地讀取每個分區(qū)partition的數(shù)據(jù),然后輸出成字符流。根據(jù)以上所述,通過編寫相應(yīng)的map/reduce程序,將列與列之間用逗號分隔,行與行之間用分號分隔,即可得到表2對應(yīng)的輸出的字符流為:“1,zhangsan,86,1988-01;2,lisi,99,1988-08;3,wangwu,72,1988-01”。根據(jù)本發(fā)明一個實施例的技術(shù)方案,通過轉(zhuǎn)換模版實現(xiàn)字符流格式的轉(zhuǎn)換。其中,轉(zhuǎn)換模板定義了字符流格式轉(zhuǎn)換的對應(yīng)結(jié)構(gòu),且轉(zhuǎn)換模板根據(jù)對應(yīng)結(jié)構(gòu)中包含的字段的名稱和類型來定義。本發(fā)明實施例中,對應(yīng)結(jié)構(gòu)是orc格式的結(jié)構(gòu),并且,轉(zhuǎn)換模板包括以“struct<>”包裹的字符串,且字符串順序地包含對應(yīng)結(jié)構(gòu)的每個字段的名稱和類型。由于用戶業(yè)務(wù)的差別,保存數(shù)據(jù)的表的結(jié)構(gòu)各不相同,要完成字符流到orc格式數(shù)據(jù)的轉(zhuǎn)換,首先需要明確該表的字段內(nèi)容,不同結(jié)構(gòu)的表需要定義不同的模板串,并且,模板串的內(nèi)容是一個以“struct<>”包裹的字符串,包含表中每個字段的名稱和類型。仍然以如表1所示的個人信息表person為例。個人信息表person中包含了4個字段,分別是:id、name、score和birth,對應(yīng)的字段的數(shù)據(jù)類型分別是:int(整型)、string(字符型)、int(整型)和string(字符型)。那么,個人信息表person轉(zhuǎn)換成orc格式數(shù)據(jù)時,對應(yīng)的轉(zhuǎn)換模板串即:“struct<id:int,name:string,score:int,birth:string>”。根據(jù)以上所介紹的方法,即可得到業(yè)務(wù)數(shù)據(jù)對應(yīng)的字符流和對應(yīng)的轉(zhuǎn)換模版。步驟s22:根據(jù)轉(zhuǎn)換模板,將字符流轉(zhuǎn)換成具有對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流。根據(jù)本發(fā)明的實施例,步驟s22在將字符流轉(zhuǎn)換成具有對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流時,可以按照以下的步驟具體執(zhí)行:步驟s221:遍歷獲取的字符流,按照轉(zhuǎn)換模板中定義的字段順序,依次存入鏈表中;步驟s222:利用對應(yīng)的序列化函數(shù)將鏈表中保存的字符流序列化成對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流。下面結(jié)合附圖介紹本發(fā)明實施例的字符流轉(zhuǎn)換過程。圖6是根據(jù)本發(fā)明實施例的字符流轉(zhuǎn)換過程示意圖。由于orc格式的標(biāo)準(zhǔn)是hive定義的,因此在格式轉(zhuǎn)換的過程中,會用到hive已經(jīng)封裝好的類和方法,例如:orcserde類、objectinspector類等。其中,orcserde類實現(xiàn)了對orc格式數(shù)據(jù)的序列化和反序列化;objectinspector類能夠?qū)⑶懊鎸嵤├卸x的模板串封裝成對象并實例化,以便orcserde類可以識別。下面以前面介紹的實施例中獲取的字符流和轉(zhuǎn)換模板為例,介紹將字符流轉(zhuǎn)換成orc格式數(shù)據(jù)的實現(xiàn)過程。其中,獲取到的字符流為:“1,zhangsan,86,1988-01;2,lisi,99,1988-08;3,wangwu,72,1988-01”,轉(zhuǎn)換模板串為:“struct<id:int,name:string,score:int,birth:string>”。首先,初始化orcserde對象和objectinspector對象。在初始化objectinspector對象時需要傳入上節(jié)中定義的轉(zhuǎn)換模板串。然后,按行遍歷獲取的字符流,并按照模板串定義的字段順序,依次放入在內(nèi)存新建的鏈表中。例如:將前面獲取到的字符流“1,zhangsan,86,1988-01;2,lisi,99,1988-08;3,wangwu,72,1988-01”放入鏈表中得到:1,zhangsan,86,1988-01→2,lisi,99,1988-08→3,wangwu,72,1988-01。最后,調(diào)用orcserde對象定義好的序列化函數(shù)serialize(),并傳入前述的鏈表和objectinspector對象作為參數(shù),字符流便會被序列化成orc格式的數(shù)據(jù)流。在步驟s22中將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流之后,還可以將數(shù)據(jù)流保存到對應(yīng)的存儲目錄。本發(fā)明的實施例中,通過調(diào)用map/reduce程序的寫操作,將所述優(yōu)化行列格式的數(shù)據(jù)流保存到優(yōu)化行列文件的存儲目錄。調(diào)用hdfs系統(tǒng)的寫操作函數(shù)contest.write(),將orc格式的數(shù)據(jù)寫入到hdfs上orc表對應(yīng)的目錄,例如:個人信息表person對應(yīng)的orc表為person_orc,該表對應(yīng)的hdfs目錄為:hdfs://…/person_orc/。根據(jù)前面所述的步驟s21至步驟s22,即可實現(xiàn)將字符流根據(jù)轉(zhuǎn)換模版轉(zhuǎn)換成orc格式的數(shù)據(jù)流。使用本發(fā)明實施例所提出的技術(shù)方案后會極大的提高字符流轉(zhuǎn)換成orc格式hive表數(shù)據(jù)的效率,且整個轉(zhuǎn)換過程都通過map/reduce程序?qū)崿F(xiàn),降低了人工參與導(dǎo)致錯誤的風(fēng)險;另外,傳統(tǒng)的轉(zhuǎn)換方法會產(chǎn)生兩份不必要的臨時數(shù)據(jù)(txt文本,和txt格式的hive表數(shù)據(jù)),而本發(fā)明實施例的技術(shù)方案可以將字符流直接存儲為orc格式的hive表數(shù)據(jù),至少節(jié)省了2/3的存儲空間。以上描述的整個轉(zhuǎn)換過程,均可以一個map/reduce的應(yīng)用程序來實現(xiàn)。在具體實現(xiàn)過程中,可以通過編寫一個shell腳本,定時地去執(zhí)行這個實現(xiàn)了orc格式轉(zhuǎn)換的map/reduce應(yīng)用程序,從而實現(xiàn)自動將字符流轉(zhuǎn)換成orc格式的數(shù)據(jù)流。例如:根據(jù)前面介紹的步驟,假設(shè)orc格式轉(zhuǎn)換的map/reduce程序為txt2orc.jar,可以通過指令:“hadoopjartxt2orc.jar”來實現(xiàn)shell腳本txt2orc.sh對這個map/reduce程序的調(diào)用。為了達(dá)到定時執(zhí)行的目的,可以將shell腳本txt2orc.sh寫到linux系統(tǒng)的定時執(zhí)行配置文件中,如:024***/temp/txt2orc.sh,以使每天的24:00執(zhí)行orc格式轉(zhuǎn)換的map/reduce程序。圖7是根據(jù)本發(fā)明實施例的字符流格式轉(zhuǎn)換的裝置的主要模塊示意圖。如圖7所示,本發(fā)明的字符流格式轉(zhuǎn)換的裝置70主要包括數(shù)據(jù)獲取模塊71和數(shù)據(jù)轉(zhuǎn)換模塊72。數(shù)據(jù)獲取模塊71用于獲取字符流和對應(yīng)的轉(zhuǎn)換模板,其中,所述轉(zhuǎn)換模板定義了所述字符流格式轉(zhuǎn)換的對應(yīng)結(jié)構(gòu),且所述轉(zhuǎn)換模板根據(jù)所述對應(yīng)結(jié)構(gòu)中包含的字段的名稱和類型來定義;數(shù)據(jù)轉(zhuǎn)換模塊72用于根據(jù)所述轉(zhuǎn)換模板,將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流。根據(jù)本發(fā)明的實施例,數(shù)據(jù)轉(zhuǎn)換模塊72還可以用于:遍歷獲取的所述字符流,按照所述轉(zhuǎn)換模板中定義的字段順序,依次存入鏈表中;利用對應(yīng)的序列化函數(shù)將所述鏈表中保存的所述字符流序列化成所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流。本發(fā)明實施例中,所述對應(yīng)結(jié)構(gòu)是orc格式的結(jié)構(gòu)。根據(jù)本發(fā)明實施例的技術(shù)方案,轉(zhuǎn)換模板包括以“struct<>”包裹的字符串,且所述字符串順序地包含所述對應(yīng)結(jié)構(gòu)的每個字段的名稱和類型。其中,若所述業(yè)務(wù)數(shù)據(jù)為文本文件,則利用map/reduce的文本讀取方式,將所述文本文件讀取為字符流。若所述業(yè)務(wù)數(shù)據(jù)為數(shù)據(jù)庫文件,則通過map/reduce程序調(diào)用所述數(shù)據(jù)庫提供的數(shù)據(jù)庫連接接口逐行讀取所述數(shù)據(jù)庫中的數(shù)據(jù),并輸出成字符流。若所述業(yè)務(wù)數(shù)據(jù)為kafka消息系統(tǒng)中存儲的文件,則以所述kafka消息系統(tǒng)的每個分區(qū)作為處理單元,通過map/reduce程序調(diào)用所述kafka消息系統(tǒng)的消息讀取接口,并行地讀取所述每個分區(qū)的數(shù)據(jù)并輸出成字符流。根據(jù)本發(fā)明的實施例,字符流格式轉(zhuǎn)換的裝置70還可以包括數(shù)據(jù)保存模塊(圖中未示出),用于:在將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流之后,將所述數(shù)據(jù)流保存到對應(yīng)的存儲目錄。例如:可以通過調(diào)用map/reduce程序的寫操作,將所述優(yōu)化行列格式的數(shù)據(jù)流保存到優(yōu)化行列文件的存儲目錄。圖8示出了可以應(yīng)用本發(fā)明實施例的字符流格式轉(zhuǎn)換的方法或字符流格式轉(zhuǎn)換的裝置的示例性系統(tǒng)架構(gòu)800。如圖8所示,系統(tǒng)架構(gòu)800可以包括終端設(shè)備801、802、803,網(wǎng)絡(luò)804和服務(wù)器805。網(wǎng)絡(luò)804用以在終端設(shè)備801、802、803和服務(wù)器805之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)804可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。用戶可以使用終端設(shè)備801、802、803通過網(wǎng)絡(luò)804與服務(wù)器805交互,以接收或發(fā)送消息等。終端設(shè)備801、802、803上可以安裝有各種通訊客戶端應(yīng)用,例如購物類應(yīng)用、網(wǎng)頁瀏覽器應(yīng)用、搜索類應(yīng)用、即時通信工具、郵箱客戶端、社交平臺軟件等(僅為示例)。終端設(shè)備801、802、803可以是具有顯示屏并且支持網(wǎng)頁瀏覽的各種電子設(shè)備,包括但不限于智能手機、平板電腦、膝上型便攜計算機和臺式計算機等等。服務(wù)器805可以是提供各種服務(wù)的服務(wù)器,例如對用戶利用終端設(shè)備801、802、803所瀏覽的購物類網(wǎng)站提供支持的后臺管理服務(wù)器(僅為示例)。后臺管理服務(wù)器可以對接收到的產(chǎn)品信息查詢請求等數(shù)據(jù)進行分析等處理,并將處理結(jié)果(例如目標(biāo)推送信息、產(chǎn)品信息等,僅為示例)反饋給終端設(shè)備。需要說明的是,本發(fā)明實施例所提供的字符流格式轉(zhuǎn)換的方法一般由服務(wù)器805執(zhí)行,相應(yīng)地,字符流格式轉(zhuǎn)換的裝置一般設(shè)置于服務(wù)器805中。應(yīng)該理解,圖8中的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器的數(shù)目僅僅是示意性的。根據(jù)實現(xiàn)需要,可以具有任意數(shù)目的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器。下面參考圖9,其示出了適于用來實現(xiàn)本發(fā)明實施例的終端設(shè)備的計算機系統(tǒng)900的結(jié)構(gòu)示意圖。圖9示出的終端設(shè)備僅僅是一個示例,不應(yīng)對本發(fā)明實施例的功能和使用范圍帶來任何限制。如圖9所示,計算機系統(tǒng)900包括中央處理單元(cpu)901,其可以根據(jù)存儲在只讀存儲器(rom)902中的程序或者從存儲部分908加載到隨機訪問存儲器(ram)903中的程序而執(zhí)行各種適當(dāng)?shù)膭幼骱吞幚?。在ram903中,還存儲有系統(tǒng)900操作所需的各種程序和數(shù)據(jù)。cpu901、rom902以及ram903通過總線904彼此相連。輸入/輸出(i/o)接口905也連接至總線904。以下部件連接至i/o接口905:包括鍵盤、鼠標(biāo)等的輸入部分906;包括諸如陰極射線管(crt)、液晶顯示器(lcd)等以及揚聲器等的輸出部分907;包括硬盤等的存儲部分908;以及包括諸如lan卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分909。通信部分909經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動器910也根據(jù)需要連接至i/o接口905??刹鹦督橘|(zhì)911,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲器等等,根據(jù)需要安裝在驅(qū)動器910上,以便于從其上讀出的計算機程序根據(jù)需要被安裝入存儲部分908。特別地,根據(jù)本發(fā)明公開的實施例,上文主要步驟圖描述的過程可以被實現(xiàn)為計算機軟件程序。例如,本發(fā)明公開的實施例包括一種計算機程序產(chǎn)品,其包括承載在計算機可讀介質(zhì)上的計算機程序,該計算機程序包含用于執(zhí)行主要步驟圖所示的方法的程序代碼。在這樣的實施例中,該計算機程序可以通過通信部分909從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)911被安裝。在該計算機程序被中央處理單元(cpu)901執(zhí)行時,執(zhí)行本發(fā)明的系統(tǒng)中限定的上述功能。需要說明的是,本發(fā)明所示的計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)或者是上述兩者的任意組合。計算機可讀存儲介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質(zhì)的更具體的例子可以包括但不限于:具有一個或多個導(dǎo)線的電連接、便攜式計算機磁盤、硬盤、隨機訪問存儲器(ram)、只讀存儲器(rom)、可擦式可編程只讀存儲器(eprom或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(cd-rom)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本發(fā)明中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。而在本發(fā)明中,計算機可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括但不限于電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質(zhì)還可以是計算機可讀存儲介質(zhì)以外的任何計算機可讀介質(zhì),該計算機可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。計算機可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括但不限于:無線、電線、光纜、rf等等,或者上述的任意合適的組合。附圖中的流程圖和框圖,圖示了按照本發(fā)明各種實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,上述模塊、程序段、或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖或流程圖中的每個方框、以及框圖或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。描述于本發(fā)明實施例中所涉及到的模塊可以通過軟件的方式實現(xiàn),也可以通過硬件的方式來實現(xiàn)。所描述的模塊也可以設(shè)置在處理器中,例如,可以描述為:一種處理器包括數(shù)據(jù)獲取模塊和數(shù)據(jù)轉(zhuǎn)換模塊。其中,這些模塊的名稱在某種情況下并不構(gòu)成對該模塊本身的限定,例如,數(shù)據(jù)獲取模塊還可以被描述為“用于獲取字符流和對應(yīng)的轉(zhuǎn)換模板的模塊,其中,所述轉(zhuǎn)換模板定義了所述字符流格式轉(zhuǎn)換的對應(yīng)結(jié)構(gòu),且所述轉(zhuǎn)換模板根據(jù)所述對應(yīng)結(jié)構(gòu)中包含的字段的名稱和類型來定義”。作為另一方面,本發(fā)明還提供了一種計算機可讀介質(zhì),該計算機可讀介質(zhì)可以是上述實施例中描述的設(shè)備中所包含的;也可以是單獨存在,而未裝配入該設(shè)備中。上述計算機可讀介質(zhì)承載有一個或者多個程序,當(dāng)上述一個或者多個程序被一個該設(shè)備執(zhí)行時,使得該設(shè)備包括:獲取字符流和對應(yīng)的轉(zhuǎn)換模板,其中,所述轉(zhuǎn)換模板定義了所述字符流格式轉(zhuǎn)換的對應(yīng)結(jié)構(gòu),且所述轉(zhuǎn)換模板根據(jù)所述對應(yīng)結(jié)構(gòu)中包含的字段的名稱和類型來定義;根據(jù)所述轉(zhuǎn)換模板,將所述字符流轉(zhuǎn)換成具有所述對應(yīng)結(jié)構(gòu)的格式的數(shù)據(jù)流。根據(jù)本發(fā)明實施例的技術(shù)方案,通過map/reduce程序?qū)I(yè)務(wù)數(shù)據(jù)對應(yīng)的字符流根據(jù)定義的轉(zhuǎn)換模版進行格式轉(zhuǎn)換,可以簡化將字符流轉(zhuǎn)化成orc格式數(shù)據(jù)流的過程,從而極大的提高了業(yè)務(wù)數(shù)據(jù)轉(zhuǎn)換成orc格式hive表數(shù)據(jù)的效率,降低了人工參與導(dǎo)致錯誤的風(fēng)險;另外,在字符流格式轉(zhuǎn)換過程中,不會產(chǎn)生多余的臨時數(shù)據(jù),直接存儲為orc格式的hive表數(shù)據(jù),從而提升了存儲空間的利用率,節(jié)省了存儲空間。上述具體實施方式,并不構(gòu)成對本發(fā)明保護范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)該明白的是,取決于設(shè)計要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進等,均應(yīng)包含在本發(fā)明保護范圍之內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
满城县| 泽普县| 嘉黎县| 西林县| 中方县| 嘉荫县| 卓资县| 荥经县| 玛纳斯县| 张家口市| 克东县| 阿拉善右旗| 延吉市| 清新县| 湘潭县| 阳曲县| 姚安县| 阳曲县| 南京市| 新竹县| 张掖市| 如皋市| 西昌市| 安徽省| 丰城市| 南康市| 龙泉市| 宿州市| 烟台市| 鹤壁市| 开平市| 山丹县| 大埔区| 高邑县| 竹北市| 山丹县| 溧阳市| 麻阳| 石河子市| 宣武区| 确山县|