对包含多行数据的数据集进行预处理,读入文本文件数据集,为每一条记录增加一个唯一的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(); } } } }
因为数据太多太大,花费时间比较多,所以选择简单地创建一个文件来进行演示,结果显示如下:(左:读入文件;右:写入文件)
有什么问题欢迎大家留言多多指教。