根据电商日志文件,分析:
-
统计页面浏览量(每行记录就是一次浏览)
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class LogAnalyzer { public static void main(String[] args) { String logFilePath = "path/to/your/log/file"; int pageViews = countPageViews(logFilePath); System.out.println("页面浏览量: " + pageViews); } public static int countPageViews(String logFilePath) { int count = 0; try (BufferedReader br = new BufferedReader(new FileReader(logFilePath))) { String line; while ((line = br.readLine()) != null) { count++; } } catch (IOException e) { e.printStackTrace(); } return count; } }
-
统计各个省份的浏览量 (需要解析IP)
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class LogAnalyzer { public static void main(String[] args) { String logFilePath = "path/to/your/log/file"; Map<String, Integer> provinceViews = countProvinceViews(logFilePath); for (Map.Entry<String, Integer> entry : provinceViews.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } public static Map<String, Integer> countProvinceViews(String logFilePath) { Map<String, Integer> provinceViews = new HashMap<>(); try (BufferedReader br = new BufferedReader(new FileReader(logFilePath))) { String line; while ((line = br.readLine()) != null) { String ip = parseIpFromLogLine(line); String province = getProvinceByIp(ip); // 需要实现根据IP获取省份的方法 provinceViews.put(province, provinceViews.getOrDefault(province, 0) + 1); } } catch (IOException e) { e.printStackTrace(); } return provinceViews; } public static String parseIpFromLogLine(String logLine) { // 实现从日志行中解析出IP地址的方法 } public static String getProvinceByIp(String ip) { // 实现根据IP地址获取省份的方法 } }
-
日志的ETL操作(ETL:数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程) 为什么要ETL:没有必要解析出所有数据,只需要解析出有价值的字段即可。本项目中需要解析出:ip、url、pageId(topicId对应的页面Id)、country、province、city
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class LogAnalyzer { public static void main(String[] args) { String logFilePath = "path/to/your/log/file"; List<Map<String, String>> etlResult = etlLog(logFilePath); for (Map<String, String> record : etlResult) { System.out.println(record); } } public static List<Map<String, String>> etlLog(String logFilePath) { List<Map<String, String>> result = new ArrayList<>(); try (BufferedReader br = new BufferedReader(new FileReader(logFilePath))) { String line; while ((line = br.readLine()) != null) { Map<String, String> record = new HashMap<>(); record.put("ip", parseIpFromLogLine(line)); record.put("url", parseUrlFromLogLine(line)); record.put("pageId", parsePageIdFromLogLine(line)); record.put("country", getCountryByIp(parseIpFromLogLine(line))); // 需要实现根据IP获取国家的方法 record.put("province", getProvinceByIp(parseIpFromLogLine(line))); // 需要实现根据IP获取省份的方法 record.put("city", getCityByIp(parseIpFromLogLine(line))); // 需要实现根据IP获取城市的方法 result.add(record); } } catch (IOException e) { e.printStackTrace(); } return result; } public static String parseIpFromLogLine(String logLine) { // 实现从日志行中解析出IP地址的方法 } public static String parseUrlFromLogLine(String logLine) { // 实现从日志行中解析出URL的方法 } public static String parsePageIdFromLogLine(String logLine) { // 实现从日志行中解析出pageId的方法 } public static String getCountryByIp(String ip) { // 实现根据IP地址获取国家的方法 } public static String getProvinceByIp(String ip) { // 实现根据IP地址获取省份的方法 } public static String getCityByIp(String ip) { // 实现根据IP地址获取城市的方法 } }