




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
基于SparkSQL實現(xiàn)廣告流量檢測數(shù)據(jù)預處理知識準備教學目標知識目標掌握DataFrame行列的增、刪操作方法。掌握用戶自定義函數(shù)的創(chuàng)建與使用方法。掌握多種DataFrame表聯(lián)合的方法。掌握DataFrame保存數(shù)據(jù)的多種方式。教學目標技能目標能夠處理DataFrame中的缺失值。能夠?qū)崿F(xiàn)DataFrame多個表聯(lián)合。能夠創(chuàng)建和使用用戶自定義函數(shù)。能夠按照不同需求采用不同方式保存DataFrame數(shù)據(jù)。素質(zhì)目標具有將問題關聯(lián)起來的系統(tǒng)思維,通過學習DataFrame多表聯(lián)合,能夠掌握DataFrame不同聯(lián)合方式的原理。具備強大的自我學習能力,通過學習用戶自定義函數(shù)的創(chuàng)建和使用,可以提高代碼的重用性和可讀性。具備知行合一的實踐精神,通過學習DataFrame的輸出操作,能夠輸出廣告流量檢測數(shù)據(jù)的關鍵特征數(shù)據(jù)。思維導圖項目背景數(shù)據(jù)預處理是整個數(shù)據(jù)分析過程中很重要的一個步驟。真實項目中的原始數(shù)據(jù)很多是不完整、不一致的臟數(shù)據(jù),無法直接用于進行數(shù)據(jù)挖掘,或?qū)@類數(shù)據(jù)的分析結(jié)果質(zhì)量一般。在廣告流量檢測案例中廣告流量檢測數(shù)據(jù)的特點是數(shù)據(jù)量包含上萬個IP,而且每個IP的訪問數(shù)據(jù)多達數(shù)萬條,存在缺失值、與分析主題無關的屬性或未直接反映虛假流量的屬性等。針對廣告流量檢測數(shù)據(jù)的特點,本項目主要對廣告流量檢測數(shù)據(jù)的存在缺失字段進行刪除處理,對處理后的數(shù)據(jù)構(gòu)建關鍵特征,并將關鍵特征合并后保存數(shù)據(jù),實現(xiàn)廣告流量檢測違規(guī)識別項目中的數(shù)據(jù)預處理。項目目標根據(jù)項目4對數(shù)據(jù)的探索結(jié)果,通過DataFrame刪除操作、自定義函數(shù)構(gòu)建特征及多表聯(lián)合等操作對廣告流量檢測數(shù)據(jù)進行預處理。目標分析使用DataFrame行列表刪除操作,對廣告流量檢測數(shù)據(jù)進行缺失字段刪除操作。使用用戶自定義函數(shù)和DataFrame表聯(lián)合操作,構(gòu)建廣告流量檢測數(shù)據(jù)關鍵特征,生成4份特征數(shù)據(jù)集,然后合并特征數(shù)據(jù)集。使用DataFrame行列表輸出操作,將廣告流量檢測模型數(shù)據(jù)保存到Hive表中。掌握DataFrame行列表增、刪操作創(chuàng)建與使用用戶自定義函數(shù)掌握DataFrame表聯(lián)合操作掌握DataFrame行列表輸出操作掌握DataFrame行列表增、刪操作Spark可以通過對DataFrame進行添加或刪除列操作得到新的DataFrame。新增數(shù)據(jù)列withColumn()方法通過添加或替換與現(xiàn)有列有相同的名字的列,返回一個新的DataFrame。當在DataFrame中新增一列時,該列可來源于本身DataFrame對象,不可來自其他非己DataFrame對象。withColumn(colName:String,col:Column)方法根據(jù)指定字段名(colName)往DataFrame中新增一列,若該字段已存在,則會覆蓋當前列。新增數(shù)據(jù)列例如,讀取users.json文件創(chuàng)建DataFrame對象df,該Json數(shù)據(jù)源其實是一張典型的結(jié)構(gòu)化學生表,包括了姓名、年齡、性別、學院等常見學生信息,其字段說明如數(shù)據(jù)格式如下表。字段字段說明name姓名age年齡sex性別institute學院新增數(shù)據(jù)列現(xiàn)向DataFrame對象user添加自增id列,其中monotonically_increasing_id()方法可生成單調(diào)遞增的整數(shù)的數(shù)據(jù)列,添加結(jié)果如右圖。刪除數(shù)據(jù)列drop()方法是刪除指定數(shù)據(jù)列,保留其他數(shù)據(jù)列。drop()方法有兩種方式使用。第一種方式是drop(colName:String),其傳入的參數(shù)是描述列字段名,例如,刪除DataFrame對象df中的id列,如代碼52所示,其返回結(jié)果如右圖。刪除數(shù)據(jù)列第二種方式是drop(col:Column):DataFrame,傳入的參數(shù)是Column類型的列,例如,刪除DataFrame對象user中的id列,其返回結(jié)果如右圖。上圖和右圖返回的結(jié)果一致,drop()方法兩種方式不同在于,前者輸入?yún)?shù)是描述列字段的String類型列,而后者傳入的是Column類型的列,兩者都是返回一個新的DataFrame對象。掌握DataFrame行列表增、刪操作創(chuàng)建與使用用戶自定義函數(shù)掌握DataFrame表聯(lián)合操作掌握DataFrame行列表輸出操作創(chuàng)建與使用用戶自定義函數(shù)當系統(tǒng)的內(nèi)置函數(shù)不足以執(zhí)行所需任務時,用戶可以定義自己的函數(shù),即用戶定義函數(shù)(user-definedfunctions,UDFs)。要在SparkSQL中使用UDFs,用戶必須首先定義函數(shù),然后向Spark注冊函數(shù),最后調(diào)用注冊的函數(shù)。用戶定義函數(shù)可以作用于單行,也可以同時作用于多行。SparkSQL還支持將現(xiàn)有的Hive中的自定義函數(shù)(UDFs)、聚合函數(shù)(UDAFs)和表值函數(shù)(UDTFs)集成至SparkSQL中使用。UDFs使用介紹UDFs的使用步驟如下。編寫函數(shù)。通過Scala語言或Python語言,編寫一個函數(shù),用于實現(xiàn)用戶想要的自定義邏輯。注冊函數(shù)。通過將函數(shù)名及其簽名(即傳入?yún)?shù)的類型和返回值的類型)傳遞給Spark的udf()函數(shù)或register()函數(shù)來注冊該函數(shù)。使用函數(shù)。一旦函數(shù)被注冊為UDF,用戶可以在Spark的DataFrame代碼或SQL查詢中使用該函數(shù)。在DataFrameAPI中,用戶可以使用注冊的函數(shù)作為列轉(zhuǎn)換函數(shù)。UDFs使用介紹在SQL查詢中使用UDFs時,注冊函數(shù)有兩種方式。第一種注冊函數(shù)使用spark.udf.register方法進行UDFs注冊,注冊后的函數(shù)既可以在SQL中使用,也可以在DataFrame的selectExpr表達式中使用。第二種使用org.apache.spark.sql.functions.udf方法進行UDFs注冊,注冊后的函數(shù)只能在DataFrame中使用,不能用在Spark-SQL中,也不能在DataFrame的selectExpr表達式中使用。使用UDFs以使用org.apache.spark.sql.functions.udf方法注冊UDFs為例,使用UDFs的流程如下圖。使用UDFs成績等級評定實現(xiàn)操作如下。創(chuàng)建DataFrame對象。創(chuàng)建DataFrame對象studentDF,查看DataFrame對象studentDF結(jié)果如下圖。使用UDFs編寫函數(shù)。自定義函數(shù),將成績轉(zhuǎn)換為考察等級。注冊并使用UDFs。將成績轉(zhuǎn)為字母等級,轉(zhuǎn)換結(jié)果如下圖。掌握DataFrame行列表增、刪操作創(chuàng)建與使用用戶自定義函數(shù)掌握DataFrame表聯(lián)合操作掌握DataFrame行列表輸出操作掌握DataFrame表聯(lián)合操作在SQL語言中用得很多的就是表聯(lián)合操作,DataFrame中同樣也提供了表聯(lián)合的功能。在DataFrame中提供了5種重載的join()方法,如下表。序號方法說明1defjoin(right:Dataset[_],usingColumn:String):DataFrame使用一個給定列與另外一個DataFrame進行內(nèi)連接2defjoin(right:Dataset[_],usingColumns:Seq[String]):DataFrame使用兩個或多個給定的列與另外一個DataFrame進行內(nèi)連接3defjoin(right:Dataset[_],usingColumns:Seq[String],joinType:String):DataFrame使用給定的列與另一個DataFrame按照指定的連接類型進行連接4defjoin(right:Dataset[_],joinExprs:Column):DataFrame使用給定的連接表達式與另一個DataFrame進行內(nèi)部連接5defjoin(right:Dataset[_],joinExprs:Column,joinType:String):DataFrame使用給定的連接表達式與另一個DataFrame按照指定的連接類型進行連接掌握DataFrame表聯(lián)合操作使用表聯(lián)合操作時,可指定的連接類型有inner、outer、left_outer、right_outer、semijoin,連接類型說明如下表。類型描述inner內(nèi)連接,返回兩個表中滿足連接條件的匹配行。只有在兩個表中都存在匹配的行時,才會返回結(jié)果outer外連接,返回兩個表中滿足連接條件的匹配行以及不滿足連接條件的行。若在一個表中找不到匹配的行,則以NULL填充結(jié)果left_outer左外連接,返回左表中的所有行以及與右表滿足連接條件的匹配行。若在右表中找不到匹配的行,則以NULL填充結(jié)果right_outer右外連接,返回右表中的所有行以及與左表滿足連接條件的匹配行。若在左表中找不到匹配的行,則以NULL填充結(jié)果semijoin半連接,返回左表中滿足連接條件的行,但只返回右表中的列??捎糜谶^濾左表中的行,而無需返回完整的連接結(jié)果。通常用于優(yōu)化查詢性能join()五大重載方法說明觀察上上表的5種join()方法,發(fā)現(xiàn)其主要區(qū)別在于輸入?yún)?shù)的個數(shù)與類型不同。其中,第1種、第2種、第4種的join()方法皆為內(nèi)連接(innerjoin),原因是其join()方法并沒有join類型的joinType的參數(shù)輸入,因此是默認的內(nèi)連接。而第3種、第5種方法皆有joinType:String該參數(shù),因此可從內(nèi)連接、左外連接、右外連接等選擇任何一種連接類型進行表聯(lián)合操作。join()五大重載方法說明觀察上上表的第1種、第2種join()方法,這兩者主要區(qū)別在于第2個輸入?yún)?shù)分別為usingColumn:String、usingColumns:Seq[String],前者是表示一個數(shù)據(jù)列的字符串(String),后者是可以表示多個數(shù)據(jù)列的序列(Seq),即當在兩個DataFrame對象進行連接操作時,不僅可以基于一個數(shù)據(jù)列,也可以用多個數(shù)據(jù)列進行匹配連接。觀察上上表的第4種、第5種join()方法,可看到出第2個輸入?yún)?shù)不再是象征著數(shù)據(jù)列的usingColumn:String、usingColumns:Seq[String],而是joinExprs:Column,其表示兩個參與join運算的連接數(shù)據(jù)列的表述(expression)。根據(jù)特定字段進行表聯(lián)合操作上上表的第1種join()方法需要兩個DataFrame中有相同的一個列名。以info.json文件為例,該json文件記錄著學生個人信息,數(shù)據(jù)字段說明如下表。字段字段說明name姓名height身高(單位:厘米)weight體重(單位:千克)phone手機號碼根據(jù)特定字段進行表聯(lián)合操作讀取info.json文件創(chuàng)建DataFrame對象,查看創(chuàng)建結(jié)果如右圖。根據(jù)特定字段進行表聯(lián)合操作對DataFrame對象users與info進行單字段內(nèi)連接,運行結(jié)果如下圖。其中,name字段只顯示一次。指定類型進行表聯(lián)合操作在根據(jù)多個字段進行表聯(lián)合的情況下,可以選上上表的第3種join()方法,指定表聯(lián)合的類型為右連接,合并結(jié)果如右圖。使用Column類型進行表聯(lián)合操作如果不采用上上表的第1種、第2種、第3種join()方法,即不采用通過直接傳入列名或多個列名組成的序列的指定連接條件的方式,也可以使用上上表的第4種join()方法,通過直接指定兩個DataFrame連接Column的形式,,其聯(lián)合結(jié)果如下圖。掌握DataFrame行列表增、刪操作創(chuàng)建與使用用戶自定義函數(shù)掌握DataFrame表聯(lián)合操作掌握DataFrame行列表輸出操作掌握DataFrame行列表輸出操作DataFrame提供了很多輸出操作的方法,其中使用save()方法可以將DataFrame數(shù)據(jù)保存成文件,也可以使用saveAsTable()方法將DataFrame數(shù)據(jù)保存成持久化的表。saveAsTable()方法會將DataFrame數(shù)據(jù)保存為表,并在Hive的元數(shù)據(jù)庫中創(chuàng)建一個指針指向該表的位置,持久化的表會一直保留,即使Spark程序重啟也沒有影響,只要連接至同一個元數(shù)據(jù)服務即可讀取表數(shù)據(jù)。讀取持久化表時,只需要用表名作為參數(shù),調(diào)用spark.table()方法即可加載表數(shù)據(jù)并創(chuàng)建DataFrame。默認情況下,saveAsTable()方法會創(chuàng)建一個內(nèi)部表,表數(shù)據(jù)的位置是由元數(shù)據(jù)服務控制的。如果刪除表,那么表數(shù)據(jù)也會同步刪除。保存為文件將DataFrame數(shù)據(jù)保存為文件,實現(xiàn)步驟如下。首先創(chuàng)建一個Map對象,用于存儲一些save()方法需要用到的一些數(shù)據(jù),指定文件的頭信息及文件的保存路徑。從user數(shù)據(jù)中選擇出name、sex和age這3列字段的數(shù)據(jù)。調(diào)用save()方法將步驟(2)中的DataFrame數(shù)據(jù)保存至copyOfUser.json文件夾中。保存為文件format()方法用于指定輸出文件格式的方法,接受一個字符串參數(shù),表示要使用的輸出文件格式;mode()方法用于指定數(shù)據(jù)保存的模式,可以接收的參數(shù)有Overwrite、Append、Ignore和ErrorIfExists,參數(shù)說明如下表;而options()方法用于設置一些額外的選項,如壓縮級別、編碼方式等。參數(shù)參數(shù)說明Overwrite表示覆蓋目錄中已存在的數(shù)據(jù)Append表示在目標目錄下追加數(shù)據(jù)Ignore表示如果目錄下已有文件,那么什么都不執(zhí)行ErrorIfExists表示如果目標目錄下已存在文件,那么拋出相應的異常保存為文件在HDFS的/user/root/SparkSQL/目錄下查看保存結(jié)果,如下圖。保存為持久化的表將DataFrame數(shù)據(jù)保存為持久化的表,實現(xiàn)步驟如下。啟動Hive的元數(shù)據(jù)服務。使用saveAsTable()方法將DataFrame對象copyOfUser保存到Hive中copyUser表,結(jié)果如下圖?;赟parkSQL實現(xiàn)廣告流量檢測數(shù)據(jù)預處理項目實施使用drop語句刪除數(shù)據(jù)自定義函數(shù)構(gòu)建關鍵特征保存DataFrame數(shù)據(jù)至Hive表使用drop語句刪除數(shù)據(jù)在項目4的任務二中,發(fā)現(xiàn)存在數(shù)據(jù)缺失的現(xiàn)象。但由于所采集到的數(shù)據(jù)為字符型數(shù)據(jù),無法對缺失值進行插補.為了減小缺失數(shù)據(jù)對模型產(chǎn)生的影響,將缺失率過高的mac、creativeid、mobile_os、mobile_type、app_key_md5、app_name_md5、os_type等屬性進行刪除,而對于idfa、imei、android、openudid這4個數(shù)據(jù)含義相似的數(shù)據(jù)字段,由于后續(xù)構(gòu)建特征時不確定是否需要使用到,所以先不進行處理。使用drop語句刪除數(shù)據(jù)處理后的結(jié)果將保存在Hive表case_data_sample_new中,保存成功后,即可在Hive的命令行窗口中,使用select語句查詢ad_traffic.case_data_sample_new的前3行,如下圖。使用drop語句刪除數(shù)據(jù)自定義函數(shù)構(gòu)建關鍵特征保存DataFrame數(shù)據(jù)至Hive表自定義函數(shù)構(gòu)建關鍵特征通過數(shù)據(jù)挖掘得到的數(shù)據(jù)分析結(jié)論,具有充分的價值,能進一步推動構(gòu)建精細化管理模式,提升管理水平的精準性、科學性、有效性。因此,要充分利用數(shù)據(jù)分析結(jié)論。根據(jù)探索分析結(jié)果,不同作弊行為產(chǎn)生的虛假流量的不同數(shù)據(jù)特征,分別構(gòu)建N、N1、N2、N3關鍵特征,關鍵特征構(gòu)建說明如下表,其中,5個小時是根據(jù)廣告點擊周期的頻率進行劃分得出。關鍵特征構(gòu)建方法說明N統(tǒng)計在5個小時內(nèi),原始數(shù)據(jù)集中,IP與Cookie兩個屬性相同的記錄出現(xiàn)次數(shù)IP和Cookie不變的情況下,出現(xiàn)的記錄次數(shù)特征:NN1統(tǒng)計在5個小時內(nèi),原始數(shù)據(jù)集中,同一個IP產(chǎn)生的Cookie記錄條數(shù)IP不變,對應Cookie出現(xiàn)的記錄次數(shù)特征:N1N2統(tǒng)計在5個小時內(nèi),原始數(shù)據(jù)集中,IP前兩段相同的記錄的出現(xiàn)次數(shù)IP前兩段相同的次數(shù)特征:N2N3統(tǒng)計在5個小時內(nèi),原始數(shù)據(jù)集中,IP前三段相同的記錄的出現(xiàn)次數(shù)IP前三段相同的次數(shù)特征:N3劃分時間區(qū)間以規(guī)定的間隔對自定義的區(qū)間(5小時,即18000秒)進行等分切割成不同的小區(qū)間,運行結(jié)果如下圖,存在34個時間分割點。構(gòu)建關鍵特征并保存至Hive表中得到時間劃分的區(qū)間列表后,以5小時的區(qū)間對數(shù)據(jù)進行特征構(gòu)建,構(gòu)建特征N、N1、N2、N3,然后在得到4個特征數(shù)據(jù)集后,將這些數(shù)據(jù)集以ranks字段進行合并得到含ranks和4個特征的完整特征數(shù)據(jù)集,將此數(shù)據(jù)集以追加(Append)的方式寫入到Hive表中。需要注意的是,代碼中是對每個區(qū)間內(nèi)特征進行構(gòu)建,又由于7天的廣告流量檢測數(shù)據(jù)的數(shù)據(jù)量非常大,處理會耗費大量的時間,且對硬件要求極大,所以需要將3臺虛擬機的內(nèi)存進行調(diào)大至2GB。若計算機硬件較差,或不想等待時間過長,可不對7天的廣告流量檢測數(shù)據(jù)進行處理,僅取出一部分時間區(qū)間進行處理即可,如將代碼中的循環(huán)變量“times.length-1”設置為“4”,取出前25個小時。構(gòu)建關鍵特征并保存至Hive表中執(zhí)行代碼后,在Hive的ad_traffic數(shù)據(jù)庫中查詢case_data_sample_model_N表的前10行,并查看表中的字段名稱及類型結(jié)果,如下圖。使用drop語句刪除數(shù)據(jù)自定義函數(shù)構(gòu)建關鍵特征保存DataFrame數(shù)據(jù)至Hive表保存DataFrame數(shù)據(jù)至Hive表從上圖中可以看出,case_data_sample_model_N表只存在5個數(shù)據(jù)字段,不包含label字段,label字段存在于完整數(shù)據(jù)集中,因此需要將case_data_sample_model_N表和case_data_sample_new表進行合并連接,構(gòu)建存在rank、dt、N、N1、N2、N3和label字段的模型數(shù)據(jù)??墒褂谩癲ata_model.show(5)”命令查看模型數(shù)據(jù)的前5行,如下圖。保存DataFrame數(shù)據(jù)至Hive表將模型數(shù)據(jù)保存在Hive表ad_traffic.case_data_sample_model中??墒褂谩癲ata_model.describe().show(false)”命令,統(tǒng)計各個特征的數(shù)據(jù)分布,如下圖。小結(jié)本項目首先介紹了DataFrame行列表增、刪操作,通過DataFrame對象新增或刪除得到新的DataFrame;接著介紹了創(chuàng)建與使用用戶自定義函數(shù),通過用戶自定義函數(shù)可以根據(jù)特定的需求進行編寫和調(diào)用;再接著介紹了DataFrame多種聯(lián)合操作,并分別舉例闡述聯(lián)合的區(qū)別;最后介紹DataFrame行列表輸出操作相關知識。對廣告流量檢測數(shù)據(jù)進行數(shù)據(jù)預處理實施操作,通過對缺失值刪除處理后構(gòu)建關鍵特征,將構(gòu)建出來的特征合并輸出保存到Hive表中。通過本項目的操作,為項目6模型的構(gòu)建提供數(shù)據(jù)特征服務?;赟parkSQL實現(xiàn)廣告流量檢測數(shù)據(jù)預處理技能拓展+測試題技能拓展Datasets是一個特定域的強類型的不可變數(shù)據(jù)集,每個Datasets都有一個非類型化視圖DataFrame(DataFameDataSet[Row]的一種表示形式)。DataFrame可以通過調(diào)用as(Encoder)方法轉(zhuǎn)換Datasets,而Datasets則可以通過調(diào)用toDF()方法轉(zhuǎn)換成DataFrame,兩者之間可以互相靈活轉(zhuǎn)換。操作Datasets可以像操作RDD一樣使用各種轉(zhuǎn)換(Transformation)操作并行操作,轉(zhuǎn)換算子采用“惰性”執(zhí)行方式。技能拓展當調(diào)用Action算子時才會觸發(fā)真正的計算執(zhí)行創(chuàng)建Datasets需要顯式提供Encoder將對象序列化為二進制形式進行存儲,而不是使用Java序列化或Kryo序列化方式Datasets使用專門的編碼器序列化對象在網(wǎng)絡間傳輸處編碼器動態(tài)生成代碼,可以在編譯時檢查類型,不需要將對象反序列化就可以進行過濾、排序等操作。避免了緩存(Cache)過程中頻繁的序列化和反序列化,有效減少了內(nèi)存的使用和Java對象頻繁垃圾回收(GarbageCollection,GC)的開銷。技能拓展Datasets創(chuàng)建的方式有如下兩種方式。通過caseclass創(chuàng)建Datasets,創(chuàng)建結(jié)果如下圖。技能拓展DataFrame調(diào)用as[Encoder]方法數(shù)創(chuàng)建Datasets,創(chuàng)建結(jié)果如下圖。知識測試(1)下列操作中,DataFrame刪除字段列操作的是()A.drop()B.withColumn()C.select()D.join()(2)DataFrame中drop()方法后返回值的類型是()。A.ArrayB.RowC.DataFrameD.Column知識測試(3)下列操作中,DataFrame新增字段列操作的是()A.drop()B.withColumn()C.select()D.join()(4)【多選題】Spark支持將現(xiàn)有的Hive中的用戶自定義函數(shù)集成至SparkSQL中使用,其中現(xiàn)有的Hive中的用戶自定義函數(shù)類別包括()A.UDFsB.UDAFsC.UDTFsD.FDAFs知識測試(5)【多選題】下列表述屬于內(nèi)連接的代碼是()A.df.join(df,Seq("city","state"),"inner").showB.df.join(df,Seq("city","state")).showC.df.join(df,Seq("city","state"),"left").showD.df.join(df,Seq("city","state"),"right").show(6)【多選題】下列表述說法正確的是()。A.format()方法指定輸出文件格式的方法,如format("json")輸出JSON文件格式。B.mode()方法用于指定數(shù)據(jù)保存的模式,可以接收的參數(shù)有Overwrite、Append、Ignore和ErrorIfExists。C.mode("Overwrite")表示在目標目錄下追加數(shù)據(jù)。D.options()方法用于設置一些額外的選項,如壓縮級別、編碼方式等。知識測試(7)下列選項中,能夠正確的將的DataFrame保存到people.json文件中的語句是()。A.df.write.json("people.json")B.df.json("people.json")C.df.write.format("csv").save("people.json")D.df.write.csv("people.json")(8)下列選項中,可將DataFrame輸出至Hive表的方法是()。A.saveAsStreamingFiles()B.saveAsTable()C.saveAsTextFiles()D.saveAsObjectFiles()知識測試(9
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年洛陽市洛寧縣招聘政府專職消防員考試真題
- 倉庫保潔服務合同范本
- 出售車位合同范本
- 企業(yè)經(jīng)銷合同范本
- 2024年德陽市就業(yè)創(chuàng)業(yè)促進中心市本級公益性崗位招聘考試真題
- 個人房屋裝飾合同范本
- 買斷合同屬于合同范本
- 低價購買租賃合同范本
- 全案整裝合同范本
- 勞務聘用合同范本6
- 2023年南京市鼓樓區(qū)建寧路街道安監(jiān)辦招聘專職安全員考試真題及答案
- 2024陜西延長石油集團礦業(yè)公司所屬單位招聘筆試參考題庫附帶答案詳解
- 鄉(xiāng)鎮(zhèn)精神衛(wèi)生工作總結(jié)
- 井工煤礦中長期防治水規(guī)劃編制細則
- 2024年湘中幼兒師范高等??茖W校高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- 設備使用手冊(范例模板)
- 上海房屋修繕工程培訓課件
- 醫(yī)院電梯安全操作培訓記錄
- 《讀懂財務報表》課件
- 《瘋狂動物城》全本臺詞中英文對照
- 建筑施工安全管理及揚塵治理檢查投標方案(技術方案)
評論
0/150
提交評論