51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

农业大数据平台需要处理来自传感器(气象、土壤)、农户上报(种植计划)、历史数据的多源数据,请设计ETL流程,包括数据清洗(如缺失值处理、异常值检测)、数据转换(如时间序列处理)、数据加载(如实时加载到数据仓库),并说明如何利用实时计算(如Flink)进行异常检测。

上海市青浦区信息技术类岗位难度:中等

答案

1) 【一句话结论】

农业大数据平台的ETL设计需分源处理多源数据(传感器流、农户结构化、历史批量),通过数据清洗(标记异常值)、转换(时间序列聚合)、加载(实时/历史分离),结合Flink实现多变量实时异常检测,保障数据质量与检测时效性。

2) 【原理/概念讲解】

ETL是数据集成的核心流程,包含Extract(抽取)、Transform(转换)、**Load(加载)**三个阶段,用于整合多源数据。针对不同数据源特性优化处理逻辑:

  • 传感器流数据:流式、高频(如每分钟采集一次),需实时ETL(Flink),清洗用统计方法(3σ原则)检测异常值,标记异常而非填充(避免均值偏差,保留异常信息用于分析);缺失值用历史均值填充。
  • 农户上报结构化数据:结构化、低频(如每周上报种植计划),批量ETL(Spark/Hive),清洗用插值或默认值处理缺失值。
  • 历史批量数据:批量、低延迟(如年度种植记录),批ETL(Hive),清洗用规则或机器学习处理异常。
    数据转换聚焦时间序列处理(如滑动窗口聚合),生成时序分析数据;结构化转换(如JSON转Parquet)提升存储效率。数据加载时,实时数据通过流处理(Flink)加载到实时数据库(如Kafka Streams),历史数据加载到数据仓库(如Hive)。

3) 【对比与适用场景】

数据源类型ETL处理方式延迟适用场景注意点
传感器流数据实时ETL(Flink)毫秒级实时异常检测、实时预警需高并发处理,资源消耗大,需优化并行度
农户上报结构化数据批量ETL(Spark)分钟级历史种植计划分析、报表适合低频、批量处理,数据量小
历史批量数据批ETL(Hive)小时级年度数据分析、趋势预测需数据缓冲,延迟较高,适合离线分析

4) 【示例】

  • 数据清洗(传感器数据,JSON格式):
    def clean_sensor_data(json_data):
        data = json.loads(json_data)
        # 数值型缺失值用历史均值填充
        for key in ['temperature', 'humidity', 'soil_moisture']:
            if data[key] is None:
                data[key] = data[key].mean()  # 历史均值填充
        # 3σ原则检测异常值(标记,不填充)
        for key in ['temperature', 'humidity', 'soil_moisture']:
            mean_val = data[key].mean()
            std_val = data[key].std()
            if abs(data[key] - mean_val) > 3 * std_val:
                data[key] = None  # 标记异常值(保留原值,后续分析)
        return data
    
  • 实时异常检测(Flink):
    // Flink Streaming API,多变量异常检测(结合温度、湿度、土壤湿度)
    DataStream<SensorData> stream = env.socketTextStream("localhost", 9999);
    stream
        .map(new SensorDataMapper())
        .keyBy(SensorData::getSensorId)
        .window(TumblingProcessingTimeWindow.of(Time.minutes(30)))  // 30分钟滑动窗口(农业异常持续时间)
        .aggregate(new MultiVarAggregator())  // 聚合多变量统计量(均值、标准差)
        .filter(new MultiVarOutlierDetector())  // 检测多变量异常(如温度过高+湿度异常)
        .print();
    

5) 【面试口播版答案】

“面试官您好,针对农业大数据平台的ETL设计,核心是分源处理多源数据,结合实时计算实现异常检测。首先,传感器数据(流式、每分钟采集一次)通过Flink实时ETL,清洗用3σ原则检测异常值,标记异常而非填充,避免偏差;农户上报的种植计划(结构化、每周上报)通过Spark批量ETL,用插值处理缺失值;历史数据通过Hive批ETL加载。数据转换阶段,将时间序列数据按30分钟滑动窗口聚合,生成分析数据。数据加载时,实时数据通过Flink加载到实时数据库,历史数据加载到Hive。然后,利用Flink的流处理,对实时数据聚合后,用多变量统计模型(结合温度、湿度、土壤湿度)检测异常,比如异常组合(温度过高+湿度异常),及时预警。这样既保证数据质量,又能实时检测异常,支持农业决策。”

6) 【追问清单】

  • 问:如何处理异常值?
    答:用3σ原则标记异常值(不填充),避免均值填充引入偏差,保留异常信息用于分析。
  • 问:多变量异常检测怎么做?
    答:结合多个传感器指标(如温度、湿度、土壤湿度),用Isolation Forest或多变量统计模型,检测异常组合(如温度过高+湿度异常)。
  • 问:实时计算和批处理如何资源权衡?
    答:批处理处理历史数据,实时处理流数据,根据数据量调整Flink并行度,避免资源浪费。
  • 问:异常检测的验证指标?
    答:用准确率、召回率、F1分数,通过历史标注数据验证模型效果。
  • 问:实时计算的容错性?
    答:Flink的检查点机制,故障后从检查点恢复,确保数据不丢失。

7) 【常见坑/雷区】

  • 忽略多源数据差异:未区分传感器、农户上报、历史数据的处理逻辑,导致清洗转换不适用。
  • 异常值填充偏差:用均值填充异常值会引入数据偏差,应标记异常。
  • 资源分配不当:实时计算与批处理资源混淆,导致资源浪费。
  • 异常检测指标单一:只看单一指标,忽略多维度,检测效果差。
  • 数据加载延迟:实时数据加载到数据仓库延迟过高,影响异常检测时效性。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1