大資料預處理,讀寫檔案為每一行資料增加一個標識ID(JAVA)
阿新 • • 發佈:2019-01-05
對包含多行資料的資料集進行預處理,讀入文字檔案資料集,為每一條記錄增加一個唯一的ID,並儲存成一個新的文字檔案。
其中每行的ID生成規則為:每一條記錄對應生成0-33隨機數,每個數對應一個特定省份,最後原始記錄和新生成的省份標籤一起寫入新的文字檔案中。
Shell終端執行語句
#!/bin/bash #下面設定輸入檔案,把使用者執行pre_deal.sh命令時提供的第一個引數作為輸入檔名稱 infile=$1 #下面設定輸出檔案,把使用者執行pre_deal.sh命令時提供的第二個引數作為輸出檔名稱 outfile=$2 #注意,最後的$infile> $outfile必須跟在}’這兩個字元的後面 awk -F "," 'BEGIN{ srand(); id=0; Province[0]="山東";Province[1]="山西";Province[2]="河南";Province[3]="河北";Province[4]="陝西";Province[5]="內蒙古";Province[6]="上海市"; Province[7]="北京市";Province[8]="重慶市";Province[9]="天津市";Province[10]="福建";Province[11]="廣東";Province[12]="廣西";Province[13]="雲南"; Province[14]="浙江";Province[15]="貴州";Province[16]="新疆";Province[17]="西藏";Province[18]="江西";Province[19]="湖南";Province[20]="湖北"; Province[21]="黑龍江";Province[22]="吉林";Province[23]="遼寧"; Province[24]="江蘇";Province[25]="甘肅";Province[26]="青海";Province[27]="四川"; Province[28]="安徽"; Province[29]="寧夏";Province[30]="海南";Province[31]="香港";Province[32]="澳門";Province[33]="臺灣"; } { id=id+1; value=int(rand()*34); print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value] }' $infile> $outfile
Java語言:
import java.io.*; import java.util.Random; public class bigData { public static void main(String[] args) { FileInputStream fis = null;//檔案輸入流 FileOutputStream fos = null;//檔案輸出流 InputStreamReader isr = null; OutputStreamWriter osw = null; BufferedReader br = null; BufferedWriter bw =null; try { String str = ""; String str1 = ""; String str2 = ""; int rand; fis = new FileInputStream("e:\\bigdatain.txt");// 讀入本地檔案 fos = new FileOutputStream("e:\\bigdataout.txt");//寫入本地檔案 isr = new InputStreamReader(fis);// InputStreamReader osw = new OutputStreamWriter(fos,"UTF-8");//寫入檔案編碼格式為UTF-8 br = new BufferedReader(isr);// 從字元輸入流中讀取檔案中的內容 bw = new BufferedWriter(osw);//將字元輸出流寫入到檔案中 String a[] = {"山東","山西","河南","河北","陝西","內蒙古","上海市","北京市","重慶市","天津市","福建","廣東", "廣西","雲南", "浙江","貴州","新疆","西藏","江西","湖南","湖北","黑龍江","吉林","遼寧","江蘇", "甘肅", "青海","四川","安徽","寧夏","海南","香港","澳門","臺灣"}; StringBuffer strb= new StringBuffer();//定義一個可變型別的String while ((str = br.readLine()) != null) { rand=new Random().nextInt(35);//生成0-34隨機數 str1 = "\t"+a[rand] + "\n";//讀出對應標識ID str2=strb.append(str).append(str1).toString();//當讀取的一行不為空時,把讀到的str和str1進行連線並把值賦給str2 } System.out.println(str2);// 打印出str2 bw.write(str2+"\n");//寫入檔案 } catch (FileNotFoundException e) { System.out.println("找不到指定檔案"); } catch (IOException e) { System.out.println("讀取/寫入檔案失敗"); } finally { try { br.close(); isr.close(); fis.close(); bw.close(); osw.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
因為資料太多太大,花費時間比較多,所以選擇簡單地建立一個檔案來進行演示,結果顯示如下:(左:讀入檔案;右:寫入檔案)
有什麼問題歡迎大家留言多多指教。