大数据预处理,读写文件为每一行数据增加一个标识ID(JAVA)

对包含多行数据的数据集进行预处理,读入文本文件数据集,为每一条记录增加一个唯一的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();
            }
        }
    }
}


因为数据太多太大,花费时间比较多,所以选择简单地创建一个文件来进行演示,结果显示如下:(左:读入文件;右:写入文件)


有什么问题欢迎大家留言多多指教。

猜你喜欢

转载自blog.csdn.net/transfer_ya/article/details/80760332
今日推荐