欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Maven和SpringBoot搭建客戶數據清洗項目框架

 更新時間:2025年07月10日 10:23:55   作者:墨瑾軒  
這篇文章主要為大家詳細介紹了如何使用Maven和SpringBoot搭建客戶數據清洗項目框架,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

一、第一步:環(huán)境搭建——給Java項目裝上‘數據吸塵器’

目標:用Maven和Spring Boot搭建數據清洗項目框架。

步驟

創(chuàng)建Maven項目

<!-- pom.xml:添加依賴 -->  
<dependencies>  
  <!-- 數據庫連接 -->  
  <dependency>  
    <groupId>com.zaxxer</groupId>  
    <artifactId>HikariCP</artifactId>  
    <version>5.0.1</version>  
  </dependency>  
  <!-- 函數式編程工具 -->  
  <dependency>  
    <groupId>org.apache.commons</groupId>  
    <artifactId>commons-lang3</artifactId>  
    <version>3.12.0</version>  
  </dependency>  
  <!-- 數據驗證 -->  
  <dependency>  
    <groupId>org.assertj</groupId>  
    <artifactId>assertj-core</artifactId>  
    <version>3.24.2</version>  
    <scope>test</scope>  
  </dependency>  
</dependencies>  

配置數據庫連接

# application.properties:連接MySQL  
spring.datasource.url=jdbc:mysql://localhost:3306/customer_db  
spring.datasource.username=root  
spring.datasource.password=root  
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver  

二、第二步:數據采集——用Java抓取‘臟數據’

目標:從數據庫、API、CSV等多源采集客戶數據。

步驟

數據庫查詢

// CustomerDAO.java:從MySQL讀取客戶數據  
import java.sql.*;  
import java.util.*;  

public class CustomerDAO {  
    public List<Map<String, Object>> fetchDirtyData() {  
        String query = "SELECT * FROM customers WHERE status = 'pending'";  
        List<Map<String, Object>> data = new ArrayList<>();  

        try (Connection conn = DriverManager.getConnection("jdbc:mysql://...", "...", "...");  
             Statement stmt = conn.createStatement();  
             ResultSet rs = stmt.executeQuery(query)) {  

            ResultSetMetaData meta = rs.getMetaData();  
            while (rs.next()) {  
                Map<String, Object> row = new HashMap<>();  
                for (int i = 1; i <= meta.getColumnCount(); i++) {  
                    row.put(meta.getColumnName(i), rs.getObject(i));  
                }  
                data.add(row);  
            }  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
        return data;  
    }  
}  

API數據采集

// ApiService.java:調用第三方API獲取數據  
import java.net.http.*;  
import java.net.URI;  
import java.util.concurrent.*;  

public class ApiService {  
    public String fetchDataFromAPI() {  
        HttpClient client = HttpClient.newHttpClient();  
        HttpRequest request = HttpRequest.newBuilder()  
            .uri(URI.create("https://api.example.com/customers"))  
            .build();  

        try {  
            return client.send(request, BodyHandlers.ofString()).body();  
        } catch (Exception e) {  
            return "{}"; // 返回空對象避免崩潰  
        }  
    }  
}  

三、第三步:數據清洗——用Java的‘三板斧’搞定臟數據

目標:用正則表達式、函數式編程、并行流清洗數據。

步驟

處理缺失值與格式問題

// DataCleaner.java:清洗單個字段  
import org.apache.commons.lang3.StringUtils;  

public class DataCleaner {  
    public static String cleanPhone(String rawPhone) {  
        // 去除非數字字符  
        String cleaned = StringUtils.remove(rawPhone, " ").replaceAll("[^0-9]", "");  
        // 補全11位手機號  
        if (cleaned.length() == 10) {  
            return "1" + cleaned;  // 假設國內手機號  
        }  
        return cleaned;  
    }  
}  

批量清洗與去重

// BatchProcessor.java:并行處理數據  
public class BatchProcessor {  
    public static List<Map<String, Object>> cleanData(List<Map<String, Object>> rawData) {  
        return rawData.parallelStream()  
            .filter(row -> row.get("email") != null)  // 過濾缺失郵箱  
            .map(row -> {  
                Map<String, Object> cleanedRow = new HashMap<>(row);  
                cleanedRow.put("phone", DataCleaner.cleanPhone((String) row.get("phone")));  
                cleanedRow.put("address", row.get("address").toString().trim());  // 去除前后空格  
                return cleanedRow;  
            })  
            .distinct()  // 去重(需重寫equals/hashCode)  
            .collect(Collectors.toList());  
    }  
}  

四、第四步:數據集成——用ETL讓數據‘全家福’

目標:將清洗后的數據整合到目標系統(tǒng)(如Hadoop、數據庫)。

步驟

數據轉換為JSON格式

// DataTransformer.java:使用Jackson庫  
import com.fasterxml.jackson.databind.ObjectMapper;  

public class DataTransformer {  
    public String toJson(List<Map<String, Object>> data) {  
        ObjectMapper mapper = new ObjectMapper();  
        try {  
            return mapper.writeValueAsString(data);  
        } catch (Exception e) {  
            return "[]";  
        }  
    }  
}  

寫入HDFS(Hadoop)

// HdfsWriter.java:用Hadoop API  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.*;  

public class HdfsWriter {  
    public void writeToFile(String data) {  
        Configuration conf = new Configuration();  
        Path path = new Path("/user/hadoop/cleaned_customers.json");  

        try (FSDataOutputStream out = FileSystem.get(conf).create(path)) {  
            out.write(data.getBytes());  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

五、第五步:質量驗證——給數據打‘體檢報告’

目標:用斷言和統(tǒng)計分析確保數據質量。

步驟

數據校驗規(guī)則

// DataValidator.java:校驗手機號格式  
public class DataValidator {  
    public static boolean validatePhone(String phone) {  
        // 中國手機號正則:1開頭,11位數字  
        return phone != null && phone.matches("^1\\d{10}$");  
    }  
}  

生成質量報告

// QualityReport.java:統(tǒng)計清洗結果  
public class QualityReport {  
    public static void generateReport(List<Map<String, Object>> data) {  
        long validPhones = data.stream()  
            .filter(row -> DataValidator.validatePhone((String) row.get("phone")))  
            .count();  

        System.out.println("? 有效手機號數量:" + validPhones);  
        System.out.println("?? 總數據量:" + data.size());  
        System.out.println("?? 清洗完成!");  
    }  
}  

六、實戰(zhàn)案例:電商客戶數據‘變形記’

場景

清洗包含臟數據的電商客戶信息(如電話格式錯誤、地址缺失)。

完整流程代碼

// Main.java:端到端流程  
public class Main {  
    public static void main(String[] args) {  
        // 1. 采集數據  
        CustomerDAO dao = new CustomerDAO();  
        List<Map<String, Object>> raw = dao.fetchDirtyData();  

        // 2. 清洗數據  
        List<Map<String, Object>> cleaned = BatchProcessor.cleanData(raw);  

        // 3. 驗證數據  
        QualityReport.generateReport(cleaned);  

        // 4. 輸出到HDFS  
        HdfsWriter writer = new HdfsWriter();  
        writer.writeToFile(new DataTransformer().toJson(cleaned));  

        System.out.println("?? 數據清洗大業(yè)完成!");  
    }  
}  

七、常見問題與解決方案

Q1:數據量太大,Java內存溢出?

解決

// 使用分頁查詢  
public List<Map<String, Object>> fetchDirtyData(int offset, int limit) {  
    String query = "SELECT * FROM customers WHERE status = 'pending' LIMIT " + offset + ", " + limit;  
    // ...  
}  

Q2:API返回數據格式不一致?

解決

// 使用Optional處理可能缺失的字段  
public String getSafeField(JsonNode node, String key) {  
    return node.has(key) ? node.get(key).asText() : "";  
}  

通過本文,你已經掌握了:

  • 環(huán)境搭建:用Maven和Spring Boot快速啟動項目。
  • 數據采集:從數據庫、API、CSV等多源抓取數據。
  • 數據清洗:用正則表達式、函數式編程處理缺失值、格式問題。
  • 數據集成:通過ETL將數據寫入Hadoop或數據庫。
  • 質量驗證:用斷言和統(tǒng)計分析確保數據合規(guī)。
  • 實戰(zhàn)案例:電商客戶數據的全流程清洗。
  • 故障排除:內存溢出、API數據不一致等問題的解決方法。

到此這篇關于使用Maven和SpringBoot搭建客戶數據清洗項目框架的文章就介紹到這了,更多相關SpringBoot數據清洗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Eclipse插件大全 挑選最牛的TOP30(全)

    Eclipse插件大全 挑選最牛的TOP30(全)

    ?“Eclipse最牛的30個插件”不知道看官們是否了解,風少俠特意翻譯出來奉獻給各位,希望大家喜歡
    2013-02-02
  • spring?boot前后端交互之數據格式轉換問題

    spring?boot前后端交互之數據格式轉換問題

    這篇文章主要介紹了spring?boot前后端交互之數據格式轉換,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • Springboot內置tomcat配置虛擬路徑過程解析

    Springboot內置tomcat配置虛擬路徑過程解析

    這篇文章主要介紹了Springboot內置tomcat配置虛擬路徑過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • java解析php函數json_encode unicode 編碼問題

    java解析php函數json_encode unicode 編碼問題

    這篇文章主要介紹了java解析php函數json_encode unicode 編碼問題,需要的朋友可以參考下
    2016-04-04
  • SpringBoot3集成Zookeeper的代碼詳解

    SpringBoot3集成Zookeeper的代碼詳解

    ZooKeeper是一個集中的服務,用于維護配置信息、命名、提供分布式同步、提供組服務,分布式應用程序以某種形式使用所有這些類型的服務,本文將給大家介紹SpringBoot3集成Zookeeper的代碼,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java之Thread的join方法實例

    Java之Thread的join方法實例

    這篇文章主要介紹了Java之Thread的join方法,實例形式講述了join方法的應用,需要的朋友可以參考下
    2014-10-10
  • Springboot登錄驗證的統(tǒng)一攔截處理的實現

    Springboot登錄驗證的統(tǒng)一攔截處理的實現

    如果不進行統(tǒng)一的攔截處理,每次用戶請求你都要去進行用戶的信息驗證,所以本文主要介紹了Springboot登錄驗證的統(tǒng)一攔截處理的實現,感興趣的可以了解一下,感興趣的可以了解一下
    2023-09-09
  • rocketmq如何修改存儲路徑

    rocketmq如何修改存儲路徑

    這篇文章主要介紹了rocketmq如何修改存儲路徑的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 單元測試 @mock與@SpringBootTest的使用

    單元測試 @mock與@SpringBootTest的使用

    這篇文章主要介紹了單元測試 @mock與@SpringBootTest的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot2整合Redis實現讀寫操作

    SpringBoot2整合Redis實現讀寫操作

    Redis,對于大家來說應該不陌生,是經常使用的開發(fā)技術之一。本文將結合實例代碼,介紹SpringBoot2整合Redis實現讀寫操作,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論