2025年大数据分析师专业能力测评试卷及答案_第1页
2025年大数据分析师专业能力测评试卷及答案_第2页
2025年大数据分析师专业能力测评试卷及答案_第3页
2025年大数据分析师专业能力测评试卷及答案_第4页
2025年大数据分析师专业能力测评试卷及答案_第5页
已阅读5页,还剩21页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年大数据分析师专业能力测评试卷及答案一、单项选择题(每题2分,共20分。每题只有一个正确答案,错选、多选、不选均不得分)1.某电商公司2024年“618”大促期间,订单表order_info包含字段order_id、user_id、sku_id、order_amt、pay_time。现需统计“大促首日(2024061800:00:00—23:59:59)”每小时GMV(单位:万元)并保留两位小数,以下PrestoSQL写法正确的是A.selectdate_trunc('hour',pay_time)ashr,round(sum(order_amt)/1e4,2)asgmvfromorder_infowherepay_timebetween'20240618'and'20240619'groupby1orderby1;B.selecthour(pay_time)ashr,round(sum(order_amt)/10000,2)asgmvfromorder_infowherepay_time>='20240618'andpay_time<'20240619'groupby1orderby1;C.selectdate_format(pay_time,'%H')ashr,sum(order_amt)/1e4asgmvfromorder_infowherepay_timelike'20240618%'groupby1;D.selectdate_trunc('hour',pay_time)ashr,round(sum(order_amt)/10000,2)asgmvfromorder_infowherepay_time>='20240618'andpay_time<'20240619'groupby1orderby1;答案:D解析:A把1e4写成1e4但单位是万元,应除以10000;B用hour()函数会丢失日期信息,导致跨天混叠;C用like导致索引失效且date_format返回字符串;D用date_trunc精确到小时,区间左闭右开,符合标准。2.使用Spark3.4读取Hive分区表user_active(dt='20240618',hour='14'),表存储格式为ORC且开启布隆过滤器,以下最能减少IO的写法是A.spark.read.table("user_active").filter("dt='20240618'andhour='14'")B.spark.read.option("basePath","/warehouse/user_active").format("orc").load("dt=20240618/hour=14")C.spark.sql("selectfromuser_activewheredt='20240618'andhour='14'")D.spark.read.orc("/warehouse/user_active/dt=20240618/hour=14")答案:B解析:A、C走HiveMetastore但无法下推分区过滤器到ORC的布隆过滤器;D未启用向量化读;B直接指定分区路径,Spark可跳过无关文件,且ORC的布隆过滤器对点查有效。3.某集群YARN总vcore=800,总mem=2400GB,队列queueA配置capacity=50%,maxCapacity=80,userlimitfactor=2。若当前queueA已用vcore=300,mem=900GB,用户u1已占vcore=200,mem=600GB,u1继续提交一个任务需vcore=150,mem=450GB,则A.因userlimitfactor=2,u1可占用最多400vcore,可立即提交B.因队列maxCapacity=80%,队列已用资源未超,可立即提交C.因用户已用资源超过userlimit,需等待D.因集群总资源不足,需等待答案:C解析:userlimitfactor=2表示单用户最多占用队列容量2=50%2=100%即800vcore、2400GB,但“已用”与“本次申请”累加后vcore=350>4000.5=200,触发userlimit限制,需等待。4.在Flink1.17中,使用事件时间处理,设置watermark策略为BoundedOutOfOrderness(5s),某并行源接收到事件e1(2024061814:00:03)、e2(14:00:07)、e3(14:00:02),当前系统时间为14:00:10,则第三个watermark值为A.1970010100:00:00B.2024061814:00:02C.2024061814:00:00D.2024061814:00:02.999答案:C解析:watermark=maxTimestamp5s,全局取最小;e1、e2、e3最大事件时间为14:00:07,减5s得14:00:02,但watermark对齐到秒级,故为14:00:00。5.使用Pythonstatsmodels.tsa.statespace.SARIMAX建立(p,d,q)(P,D,Q,s)模型,对日销量做7天季节性预测,经ADF检验d=1,经OCSB检验D=1,s=7,若AIC最小组合为p=2,q=3,P=1,Q=2,则模型阶数写作A.SARIMAX(2,1,3)(1,1,2,7)B.SARIMAX(2,1,3)(1,7,2)C.SARIMAX(2,1,3)(1,1,2)7D.SARIMAX(2,1,3)×(1,1,2)7答案:A解析:statsmodels顺序为(p,d,q)(P,D,Q,s),故A正确。6.ClickHouseMergeTree引擎表dtDate,sku_idUInt64,priceFloat64,create_timeDateTime)partitionbytoYYYYMM(dt)orderby(sku_id,dt),以下SQL可正确实现“20240618当天price上涨超过10%的sku”的是A.selectsku_idfromtablewheredt='20240618'andprice>1.1any(price)B.selectsku_idfromtablewheredt='20240618'andprice>1.1(selectpricefromtableprewheredt='20240617'andsku_id=table.sku_id)C.selecta.sku_idfromtablealeftjointablebona.sku_id=b.sku_idwherea.dt='20240618'andb.dt='20240617'anda.price>b.price1.1D.selectsku_idfromtablearrayjoinpriceaspwheredt='20240618'andp>1.1price[dt='20240617']答案:C解析:ClickHouse不支持correlatedsubquery返回标量,B报错;A无昨日价格;D语法错误;C自连接清晰可行。7.使用Hadoop3.3集群,副本数=3,块大小=256MB,现上传1.8GB文件,NameNode内存中每个块元数据约150字节,则该文件占用NameNode堆内存约为A.3456字节B.3456KBC.3456MBD.10.8KB答案:B解析:1.8GB/256MB=7.2向上取整8块,每块150字节,83150=3600字节≈3.5KB,最接近3456KB为B,但精确值3600字节,选项无精确,B为最接近数量级。8.某GBDT模型使用LightGBM,参数num_leaves=31,learning_rate=0.1,n_estimators=200,early_stopping_rounds=20,验证集AUC连续20轮未提升,训练停止于第180轮,则最终模型树棵数为A.180B.200C.160D.181答案:A解析:earlystopping触发时保留最佳迭代,最佳为180轮,故180棵。9.在PostgreSQL15中,表sales(sale_id,sku_id,sale_dt,amt)建立btree索引(sale_dt,sku_id),以下查询可走indexonlyscan的是A.selectsku_id,sum(amt)fromsaleswheresale_dtbetween'20240601'and'20240630'groupbysku_id;B.selectcount()fromsaleswheresale_dt='20240618';C.selectsale_dt,sku_idfromsaleswheresku_id=10086;D.selectmax(amt)fromsaleswheresale_dt='20240618';答案:B解析:indexonlyscan需索引覆盖查询列,B只查count(),索引包含sale_dt,且visibilitymap全可见,可indexonly;A需amt不在索引;C首列不是sku_id,需回表;D需amt。10.使用Airflow2.7,某DAG每日02:00调度,start_date=20240610,catchup=True,今日为2024061816:00,则首次触发后将回填的run日期为A.20240610B.20240611C.20240617D.20240618答案:A解析:catchup=True会自start_date起依次回填,故最早run为20240610。二、多项选择题(每题3分,共15分。每题有两个或两个以上正确答案,多选、少选、错选均不得分)11.关于HiveonTez与HiveonSpark对比,以下说法正确的有A.Tez任务DAG在客户端构建,SparkDAG在Driver构建B.Tez支持容器复用,SparkonYARN也支持executor复用C.Tez无Driver常驻,SparkDriver常驻D.Tez任务失败重试由AM负责,Spark由Driver负责答案:ACD解析:B错误,Sparkexecutor生命周期与Application相同,不存在跨Application复用。12.在Kafka3.5中,topicfoo,分区=6,副本=3,min.insync.replicas=2,produceracks=all,以下场景下消息可被commit的有A.两个follower副本所在broker同时宕机,leader正常B.leader副本宕机,新leader尚未选出C.leader与一follower正常,另一follower落后但存活D.所有broker正常,但网络抖动导致leader与一follower暂时失联答案:AC解析:B无leader;D失联后ISR收缩,若leader仍在ISR且insync>=2可commit。13.使用Pythonpandas2.0,df为DataFrame,列sku,sale_dt,price,以下可正确计算“每个sku近3日均价”的代码有A.df.groupby('sku').apply(lambdax:x.set_index('sale_dt').price.rolling('3D').mean())B.df.set_index('sale_dt').groupby('sku').price.rolling('3D').mean()C.df.sort_values(['sku','sale_dt']).groupby('sku').price.rolling(3,min_periods=1).mean()D.df.assign(avg3=df.sort_values('sale_dt').groupby('sku').price.transform(lambdax:x.rolling(3).mean()))答案:AB解析:C、D为固定窗口3行而非3日;A、B时间窗口正确。14.关于ClickHouse物化视图,以下说法正确的有A.物化视图实质是触发器+目标表B.源表insert会同步写入物化视图目标表C.物化视图可定义POPULATE关键字回填历史数据D.物化视图目标表可再建物化视图形成级联答案:ABCD解析:均正确,ClickHouse物化视图支持级联与POPULATE。15.在TensorFlow2.12中,使用tf.data.Dataset.from_generator读取大型文本,以下可提升性能的有A.设置num_parallel_calls=tf.data.AUTOTUNEB.使用.prefetch(tf.data.AUTOTUNE)C.在generator内部加time.sleep(0.1)防止CPU占用过高D.使用.cache()将数据缓存在内存答案:ABD解析:C人为降速,反而降低性能。三、判断题(每题1分,共10分。正确打“√”,错误打“×”)16.HDFS联邦机制中,每个NameNode管理独立的命名空间,但共享DataNode存储。答案:√17.SparkSQL的catalyst优化器在逻辑优化阶段会消除笛卡尔积。答案:×18.Flink的checkpoint屏障是ChandyLamport算法的实现。答案:√19.在Pythonscikitlearn中,RandomForestClassifier的n_jobs=1表示使用所有核心,包括超线程虚拟核心。答案:√20.ORC文件格式支持lightweightupdate,即原地修改单条记录。答案:×21.Kafka的consumergrouprebalance触发条件包括分区数变化、consumer成员变化。答案:√22.ClickHouse的ALTERTABLEUPDATE是原子操作,不会阻塞读。答案:×23.使用Airflow的Sensor时,设置mode='reschedule'可避免占用worker槽位。答案:√24.XGBoost的直方图算法与LightGBM的GOSS算法均属于行采样优化。答案:×25.PostgreSQL的MVCC机制中,更新操作实际插入新元组,旧元组标记为dead。答案:√四、填空题(每空2分,共20分)26.在Spark3.4中,通过______参数可开启自适应查询执行,默认值为______。答案:spark.sql.adaptive.enabled;true27.Flink的statebackend为RocksDBStateBackend时,checkpoint默认存储到______,需配置______目录。答案:JobManager的内存;state.checkpoints.dir28.Hive中,将ORC表压缩算法设为ZSTD,需在建表语句设置______='ZSTD'。答案:press29.ClickHouse中,查询selecttoStartOfInterval(toDateTime('2024061814:35:28'),INTERVAL10minute)返回结果为______。答案:2024061814:30:0030.Python中,使用______函数可将pandasDataFrame直接写入Kafka,需指定______序列化函数。答案:df.to_kafka;key.serializer与value.serializer31.在HadoopYARN中,查看正在运行的application列表的命令为yarn______。答案:applicationlist32.PostgreSQL中,查看当前会话正在执行SQL的pid,可查询系统视图______。答案:pg_stat_activity33.使用Linux______命令可查看磁盘块大小,常见大小为______KB。答案:stat/boot;434.在TensorFlow中,设置随机种子保证可重复,需同时设置tf.random.set_seed与______。答案:np.random.seed35.Airflow的DAG文件默认扫描目录为______。答案:$AIRFLOW_HOME/dags五、简答题(每题10分,共30分)36.描述一次Kafka集群因brokerfullGC导致频繁rebalance的排查与解决过程。答案:1)现象:消费组lag突增,rebalance耗时30s,循环触发。2)监控:查看brokergclog,发现老年代堆占用90%,FullGC单次2s,间隔10s。3)定位:使用jmapdump堆,MAT分析发现ReplicaFetcherThread积压1.2GBByteBuffer。4)根因:副本拉取线程因磁盘IO打满,fetch响应阻塞,导致网络层缓存无法释放。5)解决:a)升级brokerJVM至G1GC,设置XX:MaxGCPauseMillis=100;b)增加磁盘带宽,SSD缓存热分区;c)调大replica.socket.receive.buffer.bytes=1MB;d)临时调大rebalance.timeout.ms=60s,减少频繁重试。6)验证:FullGC降至0.2s,rebalance间隔>10min,lag恢复。37.说明使用SparkStructuredStreaming进行exactlyonce语义的核心机制,并给出代码示例。答案:核心机制:1)可重播source:如Kafka,维护offset于checkpoint;2)幂等sink:如MySQL使用insertonduplicatekeyupdate;3)原子提交:微批次结果与offset同一事务写入checkpoint+sink。代码示例:```scalavalspark=SparkSession.builder.config("spark.sql.streaming.checkpointLocation","/chk").getOrCreate()valdf=spark.readStream.format("kafka").option("kafka.bootstrap.servers","kfk:9092").option("subscribe","foo").load()valparsed=df.selectExpr("cast(valueasstring)asjson").select(from_json($"json",schema).as("data")).select("data.")valquery=parsed.writeStream.outputMode("append").foreachBatch{(batch,batchId)=>batch.coalesce(10).write.format("jdbc").option("url","jdbc:mysql://mysql:3306/test").option("dbtable","target").option("user","root").option("password","").mode("append").save()//offset已自动提交至/chk}.start()query.awaitTermination()```38.解释ClickHouse的MergeTree索引粒度(index_granularity)对查询性能的影响,并给出调优案例。答案:index_granularity表示每多少个行组建一条主键索引,默认8192。影响:1)粒度越小,索引文件越大,内存占用高,但mark过滤更精细,适合点查;2)粒度越大,压缩率更高,顺序扫描快,但skipindex效果差。案例:某日志表千亿行,按(user_id,event_time)排序,原index_granularity=8192,点查user_id需扫描5GB。调优:1)建表设置index_granularity=1024;2)增加bloom_filter索引(user_id)granularity=1;3)查询selectfromlogwhereuser_id=123456,扫描降至80MB,QPS由200提升至1k,内存增加8%。六、综合应用题(共25分)39.某短视频公司2024年6月上线“实时热点榜”,需求:1)统计过去1小时每10秒的视频播放次数,延迟<5s;2)过滤播放时长<3s的脏数据;3)结果写入Redis,格式为zset,key=hot:rank:{{timestamp}},member=video_id,score=播放次数;4)支持历史回溯,可重放。请给出完整技术方案,包括:a)数据流架构图(文字描述即可);b)Flink作业核心代码(Java/Scala/Python均可);c)Redis写入幂等保证;d)回溯方案。答案:a)架构:APP埋点→Nginx→Kafka(topic=play,partition=24,retention=7天)→Flink→Redis(cluster,持久化AOF)→API网关→前端。侧路:Kafka→Flume→HDFS(离线备份)。b)Flink代码(Scala):```scalavalenv=StreamExecutionEnvironment.getExecutionEnvironmentenv.enableCheckpointing(5000)env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)valkafkaSrc=newFlinkKafkaConsumer[String]("play",newSimpleStringSchema(),kafkaProps).assignTimestampsAndWatermarks(WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(3)))valplay=env.addSource(kafkaSrc).map(JSON.parseObject).filter(_.getLong("play_duration")>=3000).map(x=>(x.getString("video_id"),1L)).keyBy(_._1).window(SlidingEventTimeWindows.of(Time.minutes(60),Time.seconds(10))).aggregate(newCountAgg(),newWindowResult()).addSink(newRedisSink[HotItem](jedisPoolConfig,newRedisMapper[HotItem]{overridedefgetCommandDescription=newRedisCommandDescription(RedisCommand.ZADD,"hot:rank:%s")overridedefgetKeyFromData(t:HotItem)=t.windowEnd+""overridedefgetValueFromData(t:HotItem)=t.videoIdoverridedefgetScoreFromData(t:HotItem)=t.count.toDouble}))env.execute("hotrank")```c)幂等:RedisZADD本身幂等;Flinkcheckpoint与Redis事务保证exactlyonce;设置keyTTL=2h,防止堆积。d)回溯:Kafkatopic保留7天,通过Flinksavepoint指定offset重放;离线部分通过HDFS按小时分区,Spark批处理补录缺失排名。七、计算与建模题(共20分)40.某电商提供用户行为数据表:user_log(user_id,sku_id,action_type,log_time),action_type∈{'view','cart','buy'},数据量50亿行,存储于Hive分区表,分区字段dt。现需构建转化率模型,预测“加购且24小时内购买”概率,要求:1)特征工程:提取用户近7天view→cart→buy序列转化率、sku近30天销量、用户近30天客单价;2)模型:使用XGBoost,调参目标AUC>0.85;3)评估:按user_id分层采样,训练/验证/测试=6/2/2,给出AUC、召回@top10%。请给出:a)特征SQL(可分段);b)Python建模代码(含调参);c)评估结果与解释。答案:a)特征SQL:```sqlwithbaseas(selectuser_id,sku_id,action_type,log_time,row_number()over(partitionbyuser_id,sku_id,action_typeorderbylog_time)asrnfromuser_logwheredt>=date_sub(current_date,30)),seqas(selectuser_id,sku_id,max(casewhenaction_type='view'thenlog_timeend)aslast_view,max(casewhenaction_type='cart'thenlog_timeend)aslast_cart,max(casewhenaction_type='buy'thenlog_timeend)aslast_buyfrombasegroupbyuser_id,sku_id),labelas(selectuser_id,sku_id,casewhenlast_cartisnotnullandlast_buy>last_cartandunix_timestamp(last_buy)unix_timestamp(last_cart)<=86400then1else0endaslabelfromseq),user_featas(selectuser_id,sum(casewhenaction_type='view'then1else0end)asview_7d,sum(casewhenaction_type='cart'then1else0end)ascart_7d,sum(casewhenaction_type='buy'then1else0end)asbuy_7dfromuser_logwheredt>=date_sub(current_date,7)groupbyuser_id),sku_featas(selectsku_id,count()assale_30dfromuser_logwhereaction_type='buy'anddt>=date_sub(current_date,30)groupbysku_id),user_amtas(selectuser_id,avg(order_amt)asavg_amt_30dfromorderswheredt>=date_sub(current_date,30)groupbyuser_id)selectl.user_id,l.sku_id,l.label,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论