真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java重復(fù)代碼解決方法 java重復(fù)代碼重構(gòu)

使用java api調(diào)用HDFS文件系統(tǒng)時(shí),遇到重復(fù)的代碼,怎么解決

利用符集編碼。

創(chuàng)新互聯(lián)建站2013年開(kāi)創(chuàng)至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元安龍做網(wǎng)站,已為上家服務(wù),為安龍各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

因?yàn)镠DFS支持6種字符集編碼,每個(gè)本地文件編碼方式又是極可能不一樣的,我們上傳本地文件的時(shí)候其實(shí)就是把文件編碼成字節(jié)流上傳到文件系統(tǒng)存儲(chǔ)。

java導(dǎo)數(shù)據(jù)到esid重復(fù)

,代碼主要邏輯如下:

// 讀取要導(dǎo)入數(shù)據(jù)的文件

BufferedReader br = new BufferedReader(new FileReader(

"D:\\test\\test.txt"));

String json = null;

int count = 0;

// 開(kāi)啟批量插入

BulkRequestBuilder bulkRequest = client.prepareBulk();

while ((json = br.readLine()) != null) {

bulkRequest.add(client.prepareIndex("test", "all")

.setSource(json));

// 每一千條提交一次

if (count % 1000 == 0) {

bulkRequest.execute().actionGet();

System.out.println("提交了:" + count);

}

count++;

}

bulkRequest.execute().actionGet();

System.out.println("插入完畢");

br.close();

登錄后復(fù)制

?

運(yùn)行后發(fā)現(xiàn)一個(gè)問(wèn)題,我100多萬(wàn)條的數(shù)據(jù),導(dǎo)入到es中怎么生成了1000多萬(wàn)條,而且還是在沒(méi)有完全導(dǎo)入的情況下

然后用小批量數(shù)據(jù)導(dǎo)入到es,再把這些數(shù)據(jù)導(dǎo)出來(lái),發(fā)現(xiàn)有好多重復(fù)的數(shù)據(jù)

為什么會(huì)重復(fù)呢,原因是在每一千條提交一次代碼這塊,第一次一千條提交了,并沒(méi)有把bulkRequest置空,所以第二次提交的時(shí)候,會(huì)提交兩千條,包括第一次已經(jīng)提交的一千條,然后我們自己也沒(méi)有設(shè)置_id,所以es會(huì)自動(dòng)給數(shù)據(jù)生成一個(gè)_id,即使是重復(fù)的數(shù)據(jù),搞清楚了原因,下面來(lái)說(shuō)解決方法,主要有兩種:

第一種就是在提交了一千條后,對(duì)bulkRequest進(jìn)行重置,因?yàn)閎ulkRequest并沒(méi)有重置的方法,所以可以新建一個(gè)bulkRequest,類(lèi)似于重置,具體代碼如下:

// 讀取要導(dǎo)入數(shù)據(jù)的文件

BufferedReader br = new BufferedReader(new FileReader(

"D:\\test\\test.txt"));

String json = null;

int count = 0;

// 開(kāi)啟批量插入

BulkRequestBuilder bulkRequest = client.prepareBulk();

while ((json = br.readLine()) != null) {

bulkRequest.add(client.prepareIndex("test", "all")

.setSource(json));

// 每一千條提交一次

if (count % 1000 == 0) {

bulkRequest.execute().actionGet();

//此處新建一個(gè)bulkRequest,類(lèi)似于重置效果

bulkRequest = client.prepareBulk();

System.out.println("提交了:" + count);

}

count++;

}

bulkRequest.execute().actionGet();

System.out.println("插入完畢");

br.close();

登錄后復(fù)制

?

第二種就是自己設(shè)置_id,確保每一條數(shù)據(jù)只有一個(gè)_id,這樣的話,即使數(shù)據(jù)重復(fù)了,因?yàn)開(kāi)id是一樣的,所以es會(huì)進(jìn)行更新,這樣的話并沒(méi)有從根源上解決數(shù)據(jù)重復(fù)的問(wèn)題,只是重復(fù)數(shù)據(jù)會(huì)更新,這樣的話效率會(huì)慢,具體代碼如下:

// 讀取要導(dǎo)入數(shù)據(jù)的文件

BufferedReader br = new BufferedReader(new FileReader(

"D:\\test\\test.txt"));

String json = null;

int count = 0;

// 開(kāi)啟批量插入

BulkRequestBuilder bulkRequest = client.prepareBulk();

while ((json = br.readLine()) != null) {

//設(shè)置_id為count

bulkRequest.add(client.prepareIndex("test", "all",

String.valueOf(count)).setSource(json));

// 每一千條提交一次

if (count % 1000 == 0) {

bulkRequest.execute().actionGet();

//此處新建一個(gè)bulkRequest,類(lèi)似于重置效果

System.out.println("提交了:" + count);

}

count++;

}

bulkRequest.execute().actionGet();

System.out.println("插入完畢");

br.close();

登錄后復(fù)制

?

建議使用第一種方法,效率會(huì)快很多。

我寫(xiě)了個(gè)java代碼,編譯沒(méi)有問(wèn)題,但是執(zhí)行的時(shí)候就出了一堆亂七八糟的代碼,這是怎么回事?

原因是你編譯使用的javac,把代碼編譯成版本61的class,而你的運(yùn)行環(huán)境java,是一個(gè)老版本,能執(zhí)行的上限是52版本。

解決方法有兩個(gè):

1,安裝和JDK相同版本的Java運(yùn)行時(shí)(JRE),并正確設(shè)置PATH變量。驗(yàn)證方法是:

在黑窗口里分別輸入java -version和javac -version,兩個(gè)版本要一致,或者java的版本更高。

相關(guān)命令截圖如下:

2,編譯的時(shí)候指定運(yùn)行時(shí)的版本:使用--release參數(shù)指定版本。

例如,你通過(guò) java -version查看到版本=8,那么就按如圖的命令編譯

消去java中的重復(fù)代碼

這4個(gè)構(gòu)造函數(shù)分別是對(duì)1個(gè),2個(gè),3個(gè),以及4個(gè)參數(shù)的處理,最好別刪,如果非要?jiǎng)h掉一些代碼的話,建議刪掉前面3個(gè)構(gòu)造函數(shù),保留最后的有4個(gè)參數(shù)那個(gè),當(dāng)然最后那個(gè)也要修改

代碼:

person(String?name,int?age,int?weight,String?address){

this.name?=?name;

this.age?=?age;

this.weight?=?weight;

this.address?=?address;

}

(PS:純手打,望采納)


文章題目:java重復(fù)代碼解決方法 java重復(fù)代碼重構(gòu)
網(wǎng)站路徑:http://weahome.cn/article/doidpic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部