大数据(7k)比较Scala、Java、SQL、Python的case模式匹配

大数据求职指南:核心技能、项目经验与面试策略 大数据技术作为处理海量数据的核心技术体系,其原理基于分布式计算和存储架构,通过并行处理提升数据处理效率。这一技术的价值在于能够为企业提供实时数据分析、智能决策支持等能力,广泛应用于电商、金融、物联网等领域。对于求职者而言,掌握大数据生态中的关键组件如Spark和Hadoop至关重要,这些框架构成了数据处理的基础设施。在实际应用中,大数据技术栈涵盖了从数据采集、存储到计算的全流程,而项目经验则是验证技术能力的重要环节。通过深入理解分布式计算原理和优化策略,求职者可以更好地应对大数据岗位的技术挑战,提升在就业市 阅读详情

0、关键词

match和case

1、匹配常量

Scala

for (i <- 0 until 3){
  val j = i match {
    case 0 => "零蛋"
    case 1 => "一血"
    case _ => "五杀"
  }
  println(i + j)

Java

for (int i = 0; i < 3; i++) {
    switch (i) {
        case 0:
            System.out.println(i + "零蛋");
            break;
        case 1:
            System.out.println(i + "一血");
            break;
        default:
            System.out.println(i + "五杀");
            break;
    }
}

Python

for i in range(3):
    j = {
        0: '零蛋',
        1: '一血',
    }.get(i, '五杀')
    print(str(i) + j)
打印结果
0零蛋
1一血
2五杀

sql

SELECT
    salary,
    (CASE
    WHEN salary>10000 THEN '(10k,+∞)'
    WHEN salary>5000 THEN '(5k,10k]'
    WHEN salary>3000 THEN '(3k,5k]'
    ELSE '(-∞,3k]'
    END) AS salary_section
FROM `employees`
;

2、匹配类型

def patternMatching(x: Any): String = x match {
  case i: Int => i + " 是整数"
  case i: String => i + " 是字符串"
  case i: List[_] => i + " 是列表"
  case i: Array[Int] => i.mkString("-") + " 数组"
  case _ => "其它"
}

println(patternMatching(-1))
println(patternMatching("a"))
println(patternMatching(List(2, "b")))
println(patternMatching(Array(3,2)))
println(patternMatching(Array("c","b")))
打印结果
-1 是整数
a 是字符串
List(2, b) 是列表
3-2 数组
其它

3、匹配数组

def patternMatching(x: Array[Int]): String = x match {
  case Array(10) => "精准匹配Array(10)"
  case Array(x) => "匹配含1个元素的数组" + x
  case Array(x, y) => "匹配含2个元素的数组" + x * y
  case Array(9, _*) => "匹配以9开头的数组"
  case a => a.mkString("-")
}

println(patternMatching(Array(10)))
println(patternMatching(Array(5)))
println(patternMatching(Array(7, 6)))
println(patternMatching(Array(9, 8 ,7,6)))
println(patternMatching(Array(10,9,8)))
打印结果
精准匹配Array(10)
匹配含1个元素的数组5
匹配含2个元素的数组42
匹配以9开头的数组
10-9-8

4、匹配元组

for (t <- Seq((0, 0), (5, 0), (5, 5), (0, 0, 1))) {
  val x = t match {
    case (0, b) => " 是第1个元素是0的两元元组 " + b
    case (a, 0) => " 是第2个元素是0的两元元组 " + a
    case (a:Int, b:Int) => " 是含2个元素的元组 " + (a * b)
    case _ => " 是其它"
  }
  println(t + x)
}
打印结果
(0,0) 是第1个元素是0的两元元组 0
(5,0) 是第2个元素是0的两元元组 5
(5,5) 是含2个元素的元组 25
(0,0,1) 是其它

4.1、for匹配元组

for (("a", x) <- Seq(("a", 1), ("b", 2), ("c", 3), ("a", 4))) {
  println(x)
}
打印结果
1
4

4.2、map匹配元组

val s: Seq[(String, Int)] = Seq(("a", 2), ("b", 3), ("a", 4))
val l: Seq[(String, Int)] = s.map {
  case ("b", c) => ("b", c * 100)
  case (w, c) => (w, c * 2)
}
println(l)
打印结果
List((a,4), (b,300), (a,8))

5、声明变量时使用匹配模式

5.1、一行代码 赋值多个

Scala

val (a, b) = ("A", 2)
println(a)
println(b)

Python

a, b = 'A', 2
print(a)
print(b)

5.2、一行代码 从列表中赋值多个

Scala

def f(ls:List[Int]):Unit ={
  val List(a, b, _*) = ls
  println(a, b)
}

f(List(1, 2, 3, 4))  // (1,2)
f(List(5, 6, 7, 8, 9))  // (5,6)

Python

def f(ls):
    a, b, *args = ls
    print(a, b, args)

f([1, 2, 3, 4])  # 1 2 [3, 4]
f([5, 6, 7, 8, 9])  # 5 6 [7, 8, 9]

6、for表达式中的模式匹配

val map = Map("A" -> 1, "B" -> 0, "C" -> 3)

//全部k-v
for ((k, v) <- map) {
  println(k + v)
}

//遍历value=0的k-v:B
for ((k, 0) <- map) {
  println(k + " -> " + 0) //打印结果:B
}

//遍历v>=1的k-v:A和C
for ((k, v) <- map if v >= 1) {
  println(k + " --> " + v)
}

7、偏函数中的模式匹配(工作常用)

  • 英文名:partial function
  • 简述:不完整的函数;函数的某个部分
//将列表中的Int类型的元素加1,并去掉字符串
val ls1 = List(1,2,3,4,5,"a")
val ls2 = ls1.collect { case x: Int => x + 1 }
Scala工程师实战指南:从类型系统到生产级错误处理 Scala不是Java的语法糖升级,而是一种以类型系统为基石的工程范式。其核心在于通过不可变性、代数数据类型(如sealed trait)、高阶类型(Either、Future)等机制,在编译期捕获业务逻辑错误,而非依赖运行时防御。这种设计显著提升系统可靠性与可维护性,广泛应用于金融风控、实时流处理(Flink/Spark/Kafka Streams)及高并发微服务场景。本文聚焦真实工程断层——如Option误用导致NPE、Future组合引发线程阻塞、隐式转换失效引发TypeMismatch——结合sbt 阅读详情

相关推荐

基于Spark与协同过滤的大数据社交推荐系统实战

推荐系统是现代互联网应用的核心技术之一,其核心原理是通过分析用户的历史行为与偏好,预测并推荐其可能感兴趣的内容或用户。从技术实现上看,推荐算法主要分为基于内容的推荐和协同过滤两大类,前者依赖物品或用户的属性特征,后者则利用群体行为数据挖掘潜在关联。这两种方法各有优劣,混合推荐策略常被用于平衡精准度与覆盖率。在工程实践中,面对海量用户行为数据,分布式计算框架如Apache Spark成为处理特征工程与相似度计算的基石,能够高效完成从数据采集、特征向量化到实时推荐服务的全链路构建。本文以社交好友推荐(即“大数据

优快云头条 791

SparkSQL - 介绍及使用 Scala、Java、Python 三种语言演示

前面的文章中使用 进行数据的处理,优点是非常的灵活,但需要了解各个算子的场景,需要有一定的学习成本,而 语言是一个大家十分熟悉的语言,如果可以通过编写 而操作,学习的成本便会大大降低,在大数据领域 已经是数一个非常重要的范式,在 生态圈中,我们可以通过 进而转换成 进行数据分析,在后起之秀的 中也有 来简化数据的操作。 可以理解成是将 解析成: 再执行。的数据抽象是 和 ,底层都是。 可以理解为是一个分布式表,包括: 。 在 的基础上增加了泛型的概念。例如:有文本数据,读取为

小毕超博客 2672

GLM-5.1深度解析:长上下文、多轮稳定与结构化输出三大突破

大语言模型作为AI原生应用的底层运行时,其代码理解能力正从‘字符匹配’迈向‘语义执行’。核心在于长上下文保真度、多轮交互稳定性与结构化输出可控性三大技术支柱——前者决定模型能否像IDE一样解析AST层级关系,后者保障JSON/YAML等Schema化产出可直连kubectl或后端服务。这些能力直接支撑低代码平台、微服务重构、AI辅助审查等工程场景,使开发者从prompt调优转向提示词架构设计与人机协同工作流构建。本文聚焦智谱GLM-5.1在128K上下文理解、状态感知对话记忆及Schema约束强化学习上的工

weixin_30781775的博客 348

python数据类型-列表创建和操作

列表创建和操作a) 创建列表b) 基本操作c) 遍历与其说 列表 它是一个数据类型,用起来 更像一个灵活多变的数据存储方案创建列表创建列表例子player='mao8050' mao='100600' zou='100100100' player1=['mao',100,50] mao=[100,60,0] ty...

weixin_34174422的博客 271

Spark Word Count深度解析:从单机HashMap到分布式DAG

Word Count是理解分布式计算范式的经典入口,其本质远超单词统计——它揭示了数据分片、惰性求值、Shuffle机制与容错血缘等核心原理。作为Apache Spark的‘Hello World’,它承载着RDD抽象、DAG执行图和Tungsten优化引擎的技术价值,广泛应用于日志分析、实时流处理与数仓ETL等生产场景。通过对比单机Java实现与Spark分布式实现,可清晰把握从本地内存计算到集群协同调度的关键跃迁。本文聚焦Spark Java API下的Word Count实践,深入解析reduceBy

weixin_34293141的博客 373

Spark构建生产级用户流失预测Pipeline实战

用户流失预测是典型的业务驱动型机器学习任务,其核心不在算法本身,而在于特征工程的稳定性、标签定义的业务对齐性,以及端到端pipeline的可追溯与可重现能力。基于Spark DataFrame的全链路处理,能天然保障计算口径一致性、分区裁剪效率和Delta Lake版本管理能力;而pandas UDF结合LightGBM的推理架构,则在模型表达力与工程可控性之间取得关键平衡。该方案已广泛应用于电信、SaaS与金融行业,支撑千万级用户日更特征、百维以上业务可解释特征、Top-K Lift等可行动指标交付。本文

weixin_30701575的博客 374

Python中列表的创建及一些列表的方法

1.使用[]创建 list1=[‘1’,‘2’,‘3’] 2.使用内置函数list创建 list2=list([‘1’,‘2’,‘3’]) 3.方法 插入一个元素:append() 插入多个元素:extend() 在某位置插入一个元素:insert(位置,元素) 移除一个元素,如有多个,之一处第一个:remove() 删除一个索引上的元素,不给元素删除最后一个:pop() 清除列表元素:clear() 删除列表del() 升序排序,不产生新列表:sort()、sort(reverse=False) 降序排序

m0_55034727的博客 3228

PySpark十亿行数据实战:毫秒级稳定处理指南

PySpark作为基于Scala引擎的Python大数据框架,凭借其批流一体能力、Delta Lake原生支持及丰富UDF生态,在超大规模结构化数据处理中占据关键地位。其核心原理在于将Python开发效率与JVM执行性能结合,通过自适应查询执行(AQE)、智能Shuffle优化和内存分级管理,实现高吞吐与低延迟的平衡。技术价值体现在可复现的强一致性计算、复杂机器学习Pipeline嵌入能力,以及面向PB级数据的工程可控性。典型应用场景包括电商用户行为宽表构建、实时特征工程、LTV模型输入生成等需要兼顾规模、

388

Python从入门到实践(三)

第五章、字典 在本章中,你将学习能够将相关信息关联起来的 Python 字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制,因此我们会演示如何遍历字典中的数据。另外,你还将学习存储字典的列表、存储列表的字典和存储字典的字典。 理解字典后,你就能够更准确地为各种真实物体建模。你可以创建一个表示人的字典,然后想在其中存储多少信息就存储多少信息;姓名、年龄、地址、职业以及要描述...

Kevin_ASL的博客 607

【信息科学与工程学】【数据科学】第一百二十二篇 大数据产品中的函数与算法01

它通常指。下面按照你给出的表格列💡 说明:下表中的"产品"以开源/主流商业组件为具象载体(Hadoop、Spark、Flink、Kafka、Hive、HBase、Iceberg、Atlas、Ranger、TensorFlow 等),它们共同构成一个完整的大数据产品家族;代码为实现示例,用于说明算法在工程系统中的落地方式。

weixin_49199313的博客 200

【信息科学与工程学】【数据科学】数据科学领域-第十一篇 数据集成算法01

​​降低维护成本​​:通过抽象通用流程(如),当需要修改故障注入逻辑(如更换混沌工具)时,只需修改一处代码,无需修改所有测试用例;​​提升扩展性​​:通过参数化故障场景(如),可快速生成新的故障用例(如针对新服务的延迟故障),适应系统迭代需求;​​增强场景真实性​​:通过组合混沌操作(如),模拟真实生产环境中的复杂故障链(如“网络延迟+服务宕机”),更准确地验证系统韧性;​​提高分析效率​​:通过自动化结果分析(如),快速获取MTTR、错误率等关键指标,减少人工分析时间。

weixin_49199313的博客 957

SparkSQL & Scala

Spark SQL重度依赖Scala的语言特性,让SQL编译程序变得简单直接,特别是Spark SQL其核心代码库Tree结构,作者用直接明了的展示了代码,如何完成语法树的操作和变化,包括基于规则的性能优化等,把Scala语言的特性发挥淋漓极致,是学习Spark SQL内核代码的必备教材。 精力有限,展示部分 篇幅过长,原文浏览www.slidestalk.com/s/...

weixin_34389926的博客 333

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01

高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。

weixin_49199313的博客 251

Scala工程师进阶指南:类型系统、不可变性与生产避坑

Scala 不是语法糖堆砌的 Java 替代品,而是一套以类型系统为基石的工程化编程范式。其核心在于将业务约束(如‘可能为空’‘状态有限’‘计算未完成’)直接编码进类型签名,使错误前移至编译期。结合不可变集合、模式匹配与 sealed trait,可构建高可维护性分布式系统;借助隐式参数与类型类,实现零运行时开销的依赖抽象与行为扩展。在 Spark、Akka、Cats 等主流生态中,这些特性共同支撑着数据流水线稳定性、微服务状态一致性与函数式错误传播能力——本文聚焦真实生产场景中的五大关键断层,直击类型推导

weixin_33866037的博客 373

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营04

典型值:λ1​∈[−0.02,−0.01], λ2​∈[−0.01,0], η1​,η3​∈[0.1,0.3], η2​,η4​∈[0.05,0.15]参数:δ1​∈[−0.8,−0.3], δ2​∈[−0.5,−0.2], δ3​∈[−0.4,−0.1], δ4​∈[−0.6,−0.2]参数:φ1​∈[0.1,0.3], φ2​∈[−0.2,−0.05], φ3​∈[−0.1,0.1], φ4​∈[−0.3,−0.1]参数:α∈[0.3,0.6], β∈[0.2,0.4], γ∈[0.01,0.03]

weixin_49199313的博客 1217

【信息科学与工程学】【数据中心】第三十三篇 云数据中心综合解决方案探讨04

的计算/存储/网络/安全/互相访问设计的计算/存储/网络/安全设计的计算/存储/网络/安全设计编号类型问题(计算机系统架构/网络架构/信息架构/业务架构/组织架构/管理架构)问题的数学分析(方程/算法+求解器)参数列表时序与稳态/非稳态分析关联知识(工具/工艺)互联网接入区/DMZ区 等(含详细资源规划、互相访问限制、安全设计、网络配置、软件策略、算法策略与算法详细设计;;设计的完整代码(示例)多/双/单Region+AZ(含详细资源规划与配置设计)A276​ (基于。

weixin_49199313的博客 3560

大数据原生集群 (Hadoop3.X为核心) 本地测试环境搭建二

本文介绍了多个大数据组件的安装配置要点,包括MySQL5.6、Spark3.2.1、Presto0.272、Zeppelin0.11.2、Kafka3.7.2、Doris2.1和Apache Celeborn0.5.4。重点强调了各组件安装时的版本兼容性问题和关键配置项,如Spark3.x的端口修改、Guava包替换、Presto与Hadoop3.0的适配、Zeppelin的Spark配置准确性等。特别对国产组件Doris和新兴的Shuffle服务Celeborn进行了详细介绍,包括版本选择建议和典型配置参

别人笑我太疯癫,我笑他人看不穿。 1033

SuperPoint与SuperGlue的C++ TensorRT工程化实战:从理论到部署的完整指南

本文详细介绍了如何将SuperPoint和SuperGlue算法通过C++和TensorRT进行工程化部署,从模型准备、格式转换到TensorRT引擎构建和C++推理实现。通过性能优化技巧和实际应用案例,展示了在边缘设备上实现实时特征匹配的完整流程,显著提升处理速度与效率。

weixin_42537831的博客 161

用SQL做机器学习:BigQuery ML实战指南与避坑手册

SQL机器学习并非概念炒作,而是将特征工程、模型训练与批量预测统一在数据仓库中的工程实践。其核心原理是将模型生命周期关键环节声明化、可审计化,依托SQL的幂等性与血缘可追溯性,解决传统ML流程中特征不一致、部署链路长、跨团队协作难等痛点。技术价值在于降低MLOps门槛、加速模型交付、强化数据治理,广泛应用于用户流失预测、信用评分、实时推荐等需要快速响应业务需求的场景。BigQuery ML作为典型代表,以原生集成、SQL即特征、极简服务化为特色,成为数据工程师落地AI的关键工具。

weixin_30652491的博客 311

EFR32BG22 Thunderboard开发板 使用SPI 读取加速度计

Simplicity Studio v5 创建Silicon Labs蓝牙SoC EFR32BG22 Thunderboard模块的加速度计工程,模块上有一个ICM-20648 6轴运动跟踪设备,集成3轴加速度计和3轴陀螺仪功能,使用SPI接口跟EFR32BG22芯片连接。 我尽量以图片的形式展示(少打字): 将EFR32BG22的Thunderboard模块通过USB线插入到电脑,打开Simplicity Studio v5软件。 下面看重点: 点击搜索到的IO Stream: USART,点击Ins

qq_25727979的博客 1496

通达信筹码分布主图源码分享

NOTEXT下区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_94,XA_94)),DRAWNULL),DOTLINE,COLORYELLOW;NOTEXT上区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_81,XA_81)),DRAWNULL),DOTLINE,COLORRED;FFG1:DRAWBAND(C线,RGB(255,0,0),XA_33,RGB(255,0,0));

zhibiaogong的博客 3361
上一篇: 大数据(1b)虚拟机CentOS7集群网络配置
下一篇: 大数据(8c)RDD编程指南Scala版
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值