大数据开发工程师招聘笔试题与参考答案(某大型国企)2025年_第1页
大数据开发工程师招聘笔试题与参考答案(某大型国企)2025年_第2页
大数据开发工程师招聘笔试题与参考答案(某大型国企)2025年_第3页
大数据开发工程师招聘笔试题与参考答案(某大型国企)2025年_第4页
大数据开发工程师招聘笔试题与参考答案(某大型国企)2025年_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

大数据开发工程师招聘笔试题与参考答案(某大型国企)2025年一、单项选择题(本大题共20小题,每小题1.5分,共30分。在每小题给出的四个选项中,只有一项是符合题目要求的)1.在Hadoop3.x版本中,HDFS默认的副本存放策略采用的是机架感知。假设有一个机架拓扑结构包含两个机架(Rack1,Rack2),每个机架各有三个数据节点。如果客户端节点位于Rack1上,当写入一个Block(副本数为3)时,第一个副本会写在()。A.客户端所在节点B.Rack1中随机一个节点C.Rack2中随机一个节点D.NameNode所在节点2.SparkRDD中,对于()操作,即使RDD的缓存级别被设置为MEMORY_ONLY,Spark也不会将其缓存在内存中。A.mapB.filterC.reduceByKeyD.foreach3.在Kafka0.11版本之后,为了实现Exactly-Once语义,Kafka引入了()机制。A.幂等性生产者和事务B.手动提交OffsetC.自动提交OffsetD.Zookeeper协调4.下列关于Flink的时间语义描述错误的是()。A.ProcessingTime是指数据进入Flink算子的时间B.EventTime是指数据本身携带的时间戳C.IngestionTime是指数据进入SourceOperator的时间D.Flink默认使用EventTime,无需额外设置5.在Hive中,执行`SELECTcount(DISTINCTuser_id)FROMlogs;`时,如果数据量非常大,该查询容易产生数据倾斜。为了优化该查询,通常采取的改写方式是()。A.增加Reducer的数量B.使用`GROUPBY`进行两阶段聚合C.开启向量化查询D.使用MapJoin6.Scala语言中,下列关于集合操作的说法正确的是()。A.List是不可变的链表,添加元素会修改原对象B.ArrayBuffer是可变的数组,性能优于ArrayC.Map的get方法直接返回Value,如果Key不存在则报错D.Set中的元素是可以重复的7.HBase表中,数据是按照()排序存储的。A.RowKeyB.ColumnFamilyC.ColumnQualifierD.Timestamp8.在SparkSQL中,下列哪个函数不是窗口函数?()A.RANK()B.DENSE_RANK()C.ROW_NUMBER()D.COALESCE()9.关于YARN的资源调度器,CapacityScheduler和FairScheduler的主要区别在于()。A.CapacityScheduler不支持资源抢占,FairScheduler支持B.CapacityScheduler强调队列容量保证,FairScheduler强调队列间公平共享C.CapacityScheduler只能用于Flink,FairScheduler只能用于SparkD.CapacityScheduler是单用户调度,FairScheduler是多用户调度10.下列关于Redis数据结构的描述,不适合用于“存储用户最新的N条评论”的场景是()。A.ListB.SortedSetC.HashD.Stream11.在数仓建模中,维度表通常比较宽,包含大量的描述性属性。为了处理维度表的历史变化,最常用的缓慢变化维处理方式是()。A.SCDType1(直接覆盖)B.SCDType2(增加新行)C.SCDType3(增加新列)D.SCDType4(增加维度表)12.SparkStreaming中的DStream本质上是一系列连续的()。A.DataFrameB.RDDC.DatasetD.Task13.当HDFS的一个Block损坏时,NameNode会()。A.自动从其他副本恢复该BlockB.删除该Block对应的文件C.通知客户端数据不可用D.将损坏的Block标记为只读14.在Flink中,如果想要处理迟到数据,通常需要配合()使用。A.Watermark和SideOutputB.CheckpointC.StateBackendD.Savepoint15.下列关于Java并发编程的锁机制,ReentrantLock相比于synchronized,不具备的优势是()。A.可中断的锁获取B.公平锁的选择C.语法更简洁,自动释放锁D.尝试非阻塞地获取锁16.FlumeNG中,Source、Channel、Sink三者之间的数据传输模型是()。A.Push模型B.Pull模型C.Push/Pull结合模型D.SharedMemory模型17.在分布式系统中,一致性哈希算法主要用于解决()问题。A.数据一致性B.节点扩缩容导致的数据迁移最小化C.网络分区容错D.负载均衡18.Presto(或Trino)与HiveonSpark的主要区别在于()。A.Presto是基于内存的计算引擎,不使用MapReduce,且支持SQL交互式查询B.Hive支持SQL,Presto不支持C.Presto只能查询HDFS,Hive可以查询多种数据源D.Presto是批处理引擎,Hive是流处理引擎19.下列哪种场景最适合使用列式存储格式(如Parquet或ORC)?()A.频繁进行单行插入和更新B.需要读取整行数据C.需要查询特定列的大量数据,且进行聚合分析D.存储非结构化文本数据20.假设一个HDFS集群由5个DataNode组成,每个DataNode的磁盘容量为10TB,HDFS的副本数为3。如果不考虑系统预留空间和其他开销,该集群的最大有效存储容量约为()。A.50TBB.16.6TBC.15TBD.10TB二、多项选择题(本大题共10小题,每小题2分,共20分。在每小题给出的四个选项中,有多项是符合题目要求的。全部选对得满分,少选得部分分,错选不得分)1.Spark作业在执行过程中,导致Stage划分的算子包括()。A.groupByKeyB.mapC.joinD.filter2.下列关于Hive分区和分桶的说法,正确的有()。A.分区表是通过HDFS的文件夹结构来组织数据的B.分桶是将数据按照哈希函数分散到多个文件中C.分桶有利于抽样查询和MapJoin优化D.一个表可以分桶,但不能同时分区3.AOF(AppendOnlyFile)和RDB是Redis的两种持久化方式,下列描述正确的有()。A.RDB保存的是数据集的时间点快照,文件体积小B.AOF保存的是服务器执行的所有写命令,数据安全性较高C.Redis默认开启AOF持久化D.RDB恢复数据的速度通常比AOF快4.Flink的Checkpoint机制主要用于()。A.故障恢复B.保障Exactly-Once语义C.进行算子链的优化D.保存程序状态以便停止后重启5.在Kafka消费者组中,导致Rebalance(重平衡)发生的原因可能包括()。A.消费者组内增加或减少消费者B.订阅的Topic分区数发生变化C.消费者长时间未处理消息,超过SessionTimeoutD.Broker宕机6.下列关于HBase的RegionSplit策略,描述正确的有()。A.ConstantSizeRegionSplit:当Region大小达到阈值时分裂B.IncreasingToUpperBoundRegionSplit:随着Region数量增加,分裂阈值也会动态调整C.KeyPrefixRegionSplit:基于RowKey前缀进行分裂D.Region分裂后,父Region会立即被物理删除7.在Scala中,关于伴生对象(CompanionObject)的描述,正确的是()。A.伴生对象与类同名,且必须定义在同一个源文件中B.类和其伴生对象可以互相访问私有成员C.伴生对象中的apply方法常用于构造对象D.伴生对象自身不能继承类8.下列哪些技术组件属于Lambda架构或Kappa架构中的批处理层?()A.HadoopMapReduceB.SparkC.FlinkD.Storm9.导致Spark作业出现OOM(数据倾斜)的常见原因有()。A.Key分布不均匀B.存在Null值或空值作为KeyC.小文件过多D.使用了BroadcastJoin10.在数据清洗过程中,对于缺失值的处理方式包括()。A.删除包含缺失值的行B.使用平均值、中位数填充C.使用固定值(如0或Unknown)填充D.使用算法(如KNN)预测填充三、判断题(本大题共10小题,每小题1分,共10分。请判断每小题的表述是否正确)1.HadoopNameNode主要负责管理文件系统的元数据和客户端请求,不存储实际数据。2.Spark中的RDD是懒执行的,只有遇到Action算子时才会触发Job的提交。3.Kafka的Topic中,分区的数量创建后可以增加,但不可以减少。4.Flink的Watermark必须严格单调递增,否则会触发计算错误。5.Hive中的内部表和外部表的主要区别在于:删除内部表时会删除元数据和数据,删除外部表时只删除元数据。6.Scala中的trait(特质)完全等同于Java中的Interface(接口)。7.Redis是单线程模型的,因此所有操作都是原子性的,且不会存在并发竞争问题。8.在HBase中,修改一个单元格的数据,实际上是插入了一个具有新时间戳的数据,旧版本的数据依然存在直到被TTL或MajorCompaction清理。9.Flume拦截器(Interceptor)的主要作用是过滤或转换Event,通常在Source之后、Channel之前执行。10.Presto是基于MPP(大规模并行处理)架构的查询引擎,所有节点都在内存中处理流水线。四、填空题(本大题共10小题,每小题1.5分,共15分)1.在HDFS中,默认的BlockSize是128MB,如果有一个文件大小为200MB,它将被切分为______个Block。2.Spark中,`union`和`join`这两个操作中,属于宽依赖的是______。3.在Flink中,用于衡量事件时间进度的机制是______,它本质上是一个时间戳。4.Kafka中,每个分区都有一个Leader和若干个______,它们负责同步Leader的数据。5.在HiveSQL中,要将数组`array(1,2,3)`展开为多行,使用的函数是______。6.Scala中,如果需要在模式匹配中匹配任意类型但不使用该值,可以使用通配符______。7.假设需要计算HDFS集群存储空间使用公式:总存储量=N×D×R,其中N是节点数,D是单节点磁盘容量,8.在YARN中,负责监控ApplicationMaster运行状态的组件是______。9.数据仓库的分层架构中,DW层通常细分为DWD(明细数据层)、DWS(服务数据层/汇总层)和______。10.Zab协议是Zookeeper保证数据一致性的核心协议,它包括恢复模式和______两种模式。五、简答题(本大题共5小题,每小题6分,共30分)1.请简述HDFS的小文件问题及其产生的影响,并列举至少三种解决小文件问题的方案。2.在Spark作业中,如何定位和解决数据倾斜问题?请结合具体算子(如ReduceByKey或Join)进行说明。3.请解释Flink中的“背压”机制是如何工作的?它对流式作业的稳定性有何意义?4.请描述Kafka生产者发送消息的主要流程,并解释acks的作用。5.简述数仓建模中的星型模型和雪花模型的区别,并说明在大数据开发中为什么更倾向于使用星型模型。六、编程与算法题(本大题共2小题,每小题10分,共20分)1.SQL编程题现有两张表:`user_login`(用户登录表):`user_id`(用户ID),`login_date`(登录日期,格式yyyy-MM-dd)`user_order`(用户订单表):`order_id`(订单ID),`user_id`(用户ID),`amount`(订单金额),`order_date`(下单日期)请编写SQL(Hive/SparkSQL语法),实现以下需求:统计每个用户在2025年1月份的“登录次日留存率”。即:某日登录的用户,在次日也登录了的比例。结果字段包含:`stat_date`(统计日期),`total_users`(当日登录总人数),`retained_users`(次日留存人数),`retention_rate`(留存率,保留两位小数)。2.Scala/Java算法题给定一个字符串列表,例如:`List("apple","banana","apple","orange","banana","apple")`。请使用Scala编写一个函数,统计每个单词出现的次数(词频统计),并按照词频从高到低排序,如果词频相同,则按照单词字母顺序升序排列。要求输出格式为:`List((apple,3),(banana,2),(orange,1))`。七、综合案例分析题(本大题共1小题,共25分)背景:某大型国企电商平台计划构建一个实时用户行为分析系统。数据来源包括:1.App端用户点击流日志(JSON格式,QPS约5万)。2.埋点数据库中的业务订单变更信息。3.实时需要计算指标:每分钟各省份的GMV(成交总额)、实时热门商品Top10、用户实时访问路径分析。要求:请设计一套基于Flink+Kafka+Redis/ClickHouse的技术架构方案,需包含以下内容:1.架构设计图描述:详细描述数据从产生到最终存储或展示的流转链路。2.组件选型与理由:解释为什么选择Kafka作为消息队列,为什么选择Flink作为计算引擎,以及Redis和ClickHouse在架构中的作用。3.关键技术实现:如何保证“订单变更信息”与“点击流日志”在进行关联时的数据一致性(即双流Join问题)?如何实现“实时热门商品Top10”的更新,并保证去重和准确性?4.容错与运维:简述如何保证系统的高可用和数据的Exactly-Once语义。参考答案与解析一、单项选择题1.A解析:HDFS副本放置策略遵循:第一个副本放在客户端所在节点(如果客户端不在集群内则随机选一个),第二个副本放在不同机架的随机节点,第三个副本放在与第二个副本相同机架的不同节点。2.D解析:`foreach`是Action算子,主要用于将数据写出到外部系统,它返回Unit,不产生新的RDD,因此无法被缓存。其他Transformation算子产生的RDD可以被缓存。3.A解析:Kafka0.11引入了幂等性生产者和事务,配合幂等性可以解决单分区单会话的幂等,配合事务可以解决跨分区的原子写入,从而实现端到端的Exactly-Once语义。4.D解析:Flink默认使用的是ProcessingTime。如果要使用EventTime,需要显式调用`env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)`(旧版API)或在生成Watermark策略时指定(新版API)。5.B解析:CountDistinct直接运行会将所有Key分发到同一个Reducer,极易倾斜。通用优化是先GroupBy去重,再Count。例如:`SELECTcount(*)FROM(SELECTuser_idFROMlogsGROUPBYuser_id)t;`。6.B解析:A选项List不可变,添加元素返回新List;C选项Map.get返回Option对象,需通过getOrDefault获取;D选项Set元素不可重复。B选项ArrayBuffer是可变数组,类似Java的ArrayList。7.A解析:HBase是LSM-Tree结构,数据按照RowKey的字典序进行排序存储。这也是设计RowKey时需要利用散列或前缀来避免热点的原因。8.D解析:COALESCE()是通用函数,用于返回第一个非空参数,不是窗口函数。RANK,DENSE_RANK,ROW_NUMBER均为标准窗口函数。9.B解析:CapacityScheduler侧重于各队列资源容量保证,资源分配是先满足队列配额;FairScheduler侧重于公平,所有队列动态共享资源,FairScheduler支持抢占。10.C解析:Hash适合存储对象属性。List(LPUSH/RPOP)适合队列;SortedSet适合带权重的排序(如按时间);Stream是专门的消息流结构。Hash虽然能存,但很难维护“最新N条”的顺序和自动淘汰,效率不如List或SortedSet。11.B解析:SCDType2通过增加新行并标记生效时间来保留历史记录,是数仓中最常用的处理维度变化的方式。12.B解析:DStream(DiscretizedStream)是SparkStreaming的基础抽象,它本质上是一系列连续的RDD序列。13.A解析:HDFS通过心跳检测Block。当NameNode发现Block副本数不足(如损坏)时,会指令其他DataNode复制该Block的剩余副本到新的DataNode上,以恢复副本系数。14.A解析:Flink处理迟到数据主要依赖Watermark机制识别迟到,并通过SideOutput(侧输出流)将迟到数据收集起来进行特殊处理,或者更新结果。15.C解析:ReentrantLock需要手动在finally块中unlock,语法比synchronized复杂。C选项描述的是synchronized的优势,而非ReentrantLock。16.C解析:FlumeNG中,Source使用Push将数据推给Channel,Sink使用Pull从Channel拉取数据。17.B解析:一致性哈希主要用于解决分布式缓存或存储系统中,节点增减导致大量数据迁移的问题,使数据迁移最小化。18.A解析:Presto是基于内存的MPP架构,完全基于Pipeline流水线执行,无中间落盘,适合低延迟交互式查询;Hive通常基于MapReduce或Tez/Spark,偏批处理,延迟较高。19.C解析*:列式存储的优势在于读取特定列时IO少,且同列数据类型一致,压缩比高,适合OLAP分析场景。A、B、D更适合行式存储。20.B解析:有效存储=(节点数*单机容量)/副本数。(5二、多项选择题1.AC解析:宽依赖(ShuffleDependency)会触发Stage划分。groupByKey和Join(除BroadcastJoin外)都需要Shuffle。map和filter是窄依赖。2.ABC解析:分区是文件夹,分桶是文件哈希。分桶有利于抽样和Join(因为分桶数量是倍数关系时可做SMBJoin)。D错误,表可以既分区又分桶。3.ABD解析:Redis默认开启RDB。A、B、D描述均正确。AOF虽然安全但文件大且恢复慢。4.ABD解析:Checkpoint是Flink容错的核心,用于保存状态快照,故障时恢复,保障状态一致性。C是物理执行计划优化,与Checkpoint无关。5.ABCD解析:消费者增减、分区数变化、消费者超时、Broker宕机导致分区Leader迁移等都会触发Rebalance。6.AB解析:C是旧版或特定策略,HBase主要有ConstantSizeRegionSplit和SteppingSplitPolicy(即IncreasingToUpperBoundRegionSplit)。D错误,分裂后父Region暂时保留,待Compact后清理。7.ABC解析:A、B、C正确。D错误,伴生对象可以继承类或AbstractClass。8.AB解析:Lambda和Kappa架构中,批处理层通常使用Hadoop或Spark。Flink和Storm常用于速度层(实时层),尽管Flink也支持批处理API,但在经典架构定义中通常归类为流处理引擎。9.AB解析:数据倾斜主要由Key分布不均或Null值过多导致。C小文件过多导致的是性能问题(NameNode压力、Task启动慢),不一定是OOM。DBroadcastJoin是解决倾斜的一种手段。10.ABCD解析:这些都是数据清洗中处理缺失值的常见策略。三、判断题1.正确解析:NameNode管理元数据(目录树、Block映射),DataNode存储实际Block数据。2.正确解析:RDD的Transformation是惰性的,只有Action算子触发DAGScheduler构建DAG并提交给Cluster。3.正确解析:Kafka分区数对应日志文件数,增加分区只需增加日志,减少分区涉及日志合并,非常复杂且风险大,因此不支持减少。4.正确解析:Watermark代表了事件时间的进度,如果后续数据的时间戳小于当前Watermark,则被视为迟到数据。为了保证窗口计算的正确性,Watermark通常必须单调递增。5.正确解析:这是内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)的核心区别。6.错误解析:Scala的trait可以包含抽象方法和具体实现(字段、方法体),更像是Interface和AbstractClass的结合体。7.错误解析:Redis虽然是单线程处理命令(网络请求和命令执行),但“所有操作都是原子性”仅指单条命令。对于多个命令的组合(如先读后写),并非原子性,需要使用事务或Lua脚本。8.正确解析:HBase的更新是追加写,版本号大的在前。旧数据在MinorCompaction或MajorCompaction时被清理。9.正确解析:Interceptor是链式处理,位于Source和Channel之间,用于数据预处理。10.正确解析:Presto是典型的MPP架构,基于内存Pipeline,无中间磁盘IO,适合大规模并行交互查询。四、填空题1.2解析:200MB/128MB=1.56,切分为2个Block(一个128MB,一个72MB)。2.join解析:union只是合并RDD,不涉及Shuffle,是窄依赖。join通常需要Shuffle,是宽依赖。3.Watermark解析:Watermark是衡量事件时间进度的标记时间戳。4.Follower解析:Kafka分区采用Leader-Follower模型,ISR(In-SyncReplicas)包含Leader和所有同步成功的Follower。5.explode解析:`explode(array)`用于将数组炸裂为多行。6._解析:Scala中下划线`_`是通配符,在模式匹配中表示“任意值但不关心”。7.26解析:有效容量=10×8.ResourceManager解析:ResourceManager负责监控ApplicationMaster,并通过心跳通信。9.ADS/APP解析:DW层通常分为DWD(明细)、DWS(汇总)、ADS(应用)或APP层。10.广播解析:Zab协议包含恢复模式(选举)和广播模式(同步写入)。五、简答题1.HDFS小文件问题及解决:影响:1.NameNode内存压力:每个文件、目录、Block的元数据(约150字节)都保存在NameNode内存中。大量小文件会撑爆NameNode内存。2.寻址时间>读取时间:处理小文件时,频繁开启Block传输,磁盘IO大部分浪费在寻址上。解决方案:1.源头聚合:在数据采集侧(如Flume、Logstash)使用滚动策略或聚合机制,将小文件合并为大文件后再上传HDFS。2.HadoopArchive(HAR):使用HAR命令将多个小文件打包成一个HAR文件(类似TAR/ZIP),减少NameNode元数据。3.定期合并:编写MapReduce或Spark作业,定期读取小文件目录,合并输出到大文件目录,并删除原小文件。4.使用CombineFileInputFormat:在MapReduce读取时,使用CombineFileInputFormat将多个小文件逻辑上切分给同一个Map处理,减少Map任务数量。2.Spark数据倾斜定位与解决:定位:1.通过SparkUI查看Tasks列表,发现某个Task的执行时间远超其他Task(如1分钟vs1秒)。2.查看该Task的ShuffleRead/Write数据量,是否存在数据量巨大的情况。解决:1.提高并行度:调整`spark.sql.shuffle.partitions`或`repartition`,增加Reducer数量,将数据打散(治标)。2.BroadcastJoin:如果是大表Join小表导致倾斜,将小表Broadcast到所有Executor,避免Shuffle。3.加盐:两阶段聚合(针对ReduceByKey):先给Key加上随机前缀(如1-N)进行局部聚合,再去掉前缀进行全局聚合。Join倾斜:将倾斜Key单独提取出来,与小表进行BroadcastJoin,其余Key正常Join。4.自定义分区器:根据Key分布特性自定义Partitioner,打破默认Hash导致的倾斜。3.Flink背压机制:工作原理:Flink1.5+使用了基于Credit的背压机制。当下游算子处理速度慢于上游时,下游的TaskManager通过网络向发送方(上游)发送“Credit”通知,告知其还有多少Buffer可用。当Credit为0时,上游停止发送数据,从而避免网络或内存溢出。意义:1.流量控制:防止上游生产过快,导致下游OOM或网络拥塞。2.弹性伸缩:使流处理系统能够自适应处理速度波动,保证作业长期稳定运行,不丢数据。4.Kafka生产者发送流程及acks:流程:1.Producer拦截器处理消息。2.序列化器将Key和Value序列化。3.分区器选择目标Partition。4.消息追加到RecordAccumulator(缓冲区)。5.Sender线程启动,将Buffer中的Batch发送到KafkaBroker。6.收到Broker响应后,触发回调。acks作用:`acks=0`:生产者不等待Broker确认,吞吐量最高,但可能丢数据。`acks=1`(默认):Leader写入成功即认为成功,可能丢数据(若Leader挂了Follower没同步)。`acks=-1`(或`all`):Leader和所有ISR中的Follower都写入成功才算成功,数据最安全,但吞吐量最低。5.星型模型与雪花模型:区别:星型模型:事实表周围直接关联维度表,维度表不再关联其他表。结构简单,查询Join少,性能好,但数据冗余度高。雪花模型:维度表可以进一步拆分(规范化),形成类似雪花的结构。数据冗余低,节省存储,但查询时需要多层Join,性能较差。倾向星型模型原因:在大数据场景下,存储成本相对较低,而计算性能(IO和CPU)是瓶颈。数仓主要服务于分析和报表,查询性能至关重要。星型模型减少了Join次数,大幅提升查询速度,且结构更易于业务人员理解。六、编程与算法题1.SQL编程题```sql使用窗口函数LAG获取每个用户的上一次登录日期WITHuser_login_detailAS(SELECTuser_id,login_date,按用户分组,按日期排序,取下一次登录的日期(或者用LAG取上一次,这里用LEAD更直观看次日留存)LEAD(login_date,1)OVER(PARTITIONBYuser_idORDERBYlogin_date)asnext_login_dateFROMuser_loginWHERElogin_dateBETWEEN'2025-01-01'AND'2025-01-31'--范围稍微宽一点以便计算),统计每日留存情况daily_statsAS(SELECTlogin_dateasstat_date,COUNT(DISTINCTuser_id)astotal_users,COUNT(DISTINCTCASEWHENDATEDIFF(next_login_date,login_date)=1THENuser_idEND)asretained_usersFROMuser_login_detailWHERElogin_date<='2025-01-31'--确保统计日期在1月内GROUPBYlogin_date)SELECTstat_date,total_users,retained_users,CAST(retained_usersASDECIMAL(10,2))/total_usersasretention_rateFROMdaily_statsORDERBYstat_date;```2.Scala算法题```scalaobjectWordCountSort{defsortWordCount(words:List[String]):List[(String,Int)]={//1.统计词频groupBy->mapValuessizevalwordCounts=words.groupBy(identity).mapValues(_.size)//2.转换为List并排序//排序规则:词频降序(-count),如果相同则单词升序wordCounts.toList.sortWith{(left,right)=>if(left._2!=right._2){left._2>right._2//词频降序}else{left._1<right._1//单词升序}}}//测试defmain(args:Array[String]):Unit={valinput=List("apple","banana","apple","orange","banana","apple")valresult=sortWordCount(input)println(result)}}```七、综合案例分析题1.架构设计图描述:数据采集层:App日志通过Flume/Logstash采集,发送到KafkaTopic`user_behav

温馨提示

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

评论

0/150

提交评论