美文网首页
数据清洗流程

数据清洗流程

作者: 草珊瑚_6557 | 来源:发表于2019-03-29 16:05 被阅读0次

    需求

    给你一个包含一万五行的excel文件。
    根据每行的数据作为请求参数,去请求指定接口,获取响应数据,对数据进行解析,解析结果放到excel里面输出给业务方。

    第一步,获取接口响应数据,写到日志

    xlsx文件转csv文本文件。
    多线程读取csv文本内容,发送请求,处理响应,写入日志。
    需要处理csv文本某行内容异常,接口请求异常,接口响应异常,响应内容处理异常。
    对这些异常,都返回null关键字。
    写到日志的数据分两块,一个是原始的响应数据,一个是自己解析后的数据。
    其中多线程读取文本文件的参考代码如下:

    InputStreamReader fileISR = null;
    BufferedReader reader = null;
    
    try {
        fileISR = new InputStreamReader(new FileInputStream(file), "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    try {
        reader = new BufferedReader(fileISR);
    } catch (Exception e) {
        e.printStackTrace();
    }
    
    reader.lines().parallel().forEach(line -> {
        // 对line进行处理
    });
    
    fileISR.close();
    

    第二步,从日志中读取所需数据,写到excel

    多线程读取日志内容,解析数据,然后写到缓冲池,缓冲池刷到excel文件。

    缓冲池写文件参考代码如下:

    List<String> log_list = FileUtils.readLines("日志文件路径", StandardCharsets.UTF_8);
    int write_flag = 1;
    
    File file_out = null;
    FileInputStream file_is = null;
    XSSFWorkbook workbook_out = null;
    XSSFSheet sheet_out = null;
    FileOutputStream stream_output = null;
    for (int i = 0; i < log_list.size(); i++) {
        String result = log_list.get(i);
        int response_result_pos = result.indexOf(字符串截取位置);
    
        if (response_result_pos > -1) {
            if (write_flag == 1) {
                file_out = new File(file_output_src);
                file_is = new FileInputStream(file_out);
                workbook_out = new XSSFWorkbook(file_is);
                sheet_out = workbook_out.getSheetAt(0);
                stream_output = new FileOutputStream(file_output_src);
            }
    
            // 业务逻辑处理代码
    
            write_flag = write_flag + 1;
            if (write_flag == 1000) {
                write_flag = 1;
                stream_output.flush();
                workbook_out.write(stream_output);
                stream_output.close();
            }
    
        }
    
    }
    if (stream_output != null) {
        stream_output.flush();
        workbook_out.write(stream_output);
        stream_output.close();
    }
    

    实际运行时间

    配置未I7 CPU,8G 内存。
    一万五的数据,第一步耗费20min,第二步耗费7min。

    相关文章

      网友评论

          本文标题:数据清洗流程

          本文链接:https://www.haomeiwen.com/subject/plzlbqtx.html