廢話不多說(shuō) , 直接看下面的代碼片段 。
@Features(Feature.ModelIde)
@Stories(Story.DataSplit)
@Description(“使用pyspark驗(yàn)證隨機(jī)拆分中的分層拆分”)
@Test
public void dataRandomFiledTest(){
String script = “# coding: UTF-8n” +
“# input script according to definition of “run” interfacen” +
“from trailer import loggern” +
“from pyspark import SparkContextn” +
“from pyspark.sql import SQLContextn” +
“n” +
“n” +
“def run(t1, t2, context_string):n” +
” # t2為原始數(shù)據(jù) , t1為經(jīng)過(guò)數(shù)據(jù)拆分算子根據(jù)字段分層拆分后的數(shù)據(jù)n” +
” # 由于數(shù)據(jù)拆分是根據(jù)col_20這一列進(jìn)行的分層拆分 , 所以在這里分別n” +
” # 對(duì)這2份數(shù)據(jù)進(jìn)行分組并統(tǒng)計(jì)每一個(gè)分組的計(jì)數(shù) 。由于這一列是labeln” +
” # 所以其實(shí)只有兩個(gè)分組 , 分別是0和1n” +
” t2_row = t2.groupby(t2.col_20).agg({“*” : “count”}).cache()n” +
” t1_row = t1.groupby(t1.col_20).agg({“*” : “count”}).cache()n” +
” n” +
” n” +
” t2_0 = t2_row.filter(t2_row.col_20 == 1).collect()[0][“count(1)”]n” +
” t2_1 = t2_row.filter(t2_row.col_20 == 0).collect()[0][“count(1)”]n” +
” n” +
” t1_0 = t1_row.filter(t1_row.col_20 == 1).collect()[0][“count(1)”]n” +
” t1_1 = t1_row.filter(t1_row.col_20 == 0).collect()[0][“count(1)”]n” +
” n” +
” # 數(shù)據(jù)拆分算子是根據(jù)字段按照1:1的比例進(jìn)行拆分的 。所以t1和t2的每一個(gè)分組n” +
” # 都應(yīng)該只有原始數(shù)據(jù)量的一半n” +
” if t2_0/2 – t1_0 >1:n” +
” raise Run財(cái)路哥Error(“the 0 class is not splited correctly”)n” +
” n” +
” if t2_1/2 – t1_1 >1:n” +
” raise Run財(cái)路哥Error(“the 1 class is not splited correctly”)n” +
“n” +
” return [t1]”;
我們用來(lái)掃描數(shù)據(jù)表的API仍然是我們之前提到的dataframe 。上面的代碼片段是我們嵌入spark任務(wù)的腳本 。里面t1和t2都是dataframe , 分別代表原始數(shù)據(jù)和經(jīng)過(guò)數(shù)據(jù)拆分算法拆分后的數(shù)據(jù) 。測(cè)試的功能是分層拆分 。也就是按某一列按比例抽取數(shù)據(jù) 。比如說(shuō)100W行的數(shù)據(jù) , 我按job這個(gè)字段分層拆分 , 我要求的比例是30% 。也即是說(shuō)每種職業(yè)抽取30%的數(shù)據(jù)出來(lái) , 相當(dāng)于這是一個(gè)數(shù)據(jù)采樣的功能 。OK , 所以在測(cè)試腳本中 , 我們分別先把原始表和經(jīng)過(guò)采樣的表按這一列進(jìn)行分組操作 , 也就是groupby(col_20) 。這里我選擇的是按col_20進(jìn)行分層拆分 。根據(jù)剛才講的這樣的分組操作后會(huì)觸發(fā)shuffle , 把有相同職業(yè)的數(shù)據(jù)傳到一個(gè)數(shù)據(jù)分片上 。然后我們做count這種操作統(tǒng)計(jì)每一個(gè)組的行數(shù) 。因?yàn)檫@個(gè)算法我是按1:1拆分的 , 也就是按50%采樣 。所以最后我要驗(yàn)證拆分后的數(shù)據(jù)的每一組的行數(shù)都是原始數(shù)據(jù)中該組的一半 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 男人如何處理婆媳關(guān)系 聰明男人處理婆媳關(guān)系
- 目前最好的cpu排名 電腦cpu處理器最新排名
- iphone手機(jī)丟失解決措施 蘋果手機(jī)被盜怎么找回處理
- 該如何處理婆媳關(guān)系 怎么解決婆媳關(guān)系
- 老婆出軌了該怎么處理才是最好的 出軌的婚姻能撐多久
- 老婆外遇怎樣處理 怎樣處理老婆出軌的情況
- ?老公外遇怎么處理 老公有外遇怎么辦
- 老公出軌后的真實(shí)心理 男人出軌后女人錯(cuò)誤的處理方法
- 二婚夫妻怎么處理財(cái)務(wù)問(wèn)題 二婚夫妻誰(shuí)管錢好
- ubuntu上不了網(wǎng)處理方法 ubuntu上不了網(wǎng)怎么辦
