在用键值对RDD进行操作时,经常会遇到不知道如何筛选出想要数据的情况,这里提供了一些解决方法

1、对固定的Key数据进行查询

代码说明:

  1. SparkConf:配置 Spark 应用程序的一些基本信息。
  2. SparkContext:创建 Spark 上下文以在 Spark 中执行操作。
  3. parallelize:生成一个包含多个键值对的初始 RDD。
  4. filter:使用 filter 方法筛选出 key 等于指定值的元素。
  5. collect:收集结果并在驱动程序上进行输出。
  6. foreach:用来遍历和打印过滤后的结果。
import org.apache.spark.{SparkConf, SparkContext}

object KeyFilterExample {
def main(args: Array[String]): Unit = {
// 初始化 SparkContext
val conf = new SparkConf().setAppName("Key Filter Example").setMaster("local[*]")
val sc = new SparkContext(conf) // 创建一个示例 RDD,包含 key-value 键值对
val rdd = sc.parallelize(Seq(("a", 1), ("b", 2), ("c", 3), ("a", 4), ("b", 5))) // 定义要筛选的特定 key
val specifiedKey = "a" // 使用 filter 操作输出指定的 key 值
val filteredRdd = rdd.filter { case (key, _) => key == specifiedKey } // 输出结果
filteredRdd.collect().foreach { case (key, value) =>
println(s"Key: $key, Value: $value")
} // 停止 SparkContext
sc.stop()
}
}

2、对不固定的Key数据进行模糊查询

代码说明:

  1. SparkConfSparkContext:与之前示例相同,用于初始化 Spark 应用。
  2. parallelize:生成一个包含多个键值对的初始 RDD。
  3. filter:使用 Scala 的模式匹配功能来筛选出以字母 'a' 开头的 keys。
    • case (key, _) if key.startsWith("a"):当 key 以 'a' 开头时,返回 true,否则返回 false
  4. collect:收集结果并在驱动程序上进行输出。
  5. foreach:遍历并打印过滤后的结果。
import org.apache.spark.{SparkConf, SparkContext}

object PatternMatchingKeyExample {
def main(args: Array[String]): Unit = {
// 初始化 SparkContext
val conf = new SparkConf().setAppName("Pattern Matching Key Example").setMaster("local[*]")
val sc = new SparkContext(conf) // 创建一个示例 RDD,包含 key-value 键值对
val rdd = sc.parallelize(Seq(("apple", 1), ("banana", 2), ("apricot", 3),
("berry", 4), ("avocado", 5))) // 使用 filter 操作与模式匹配筛选以 'a' 开头的 keys
val patternMatchedRdd = rdd.filter {
case (key, _) if key.startsWith("a") => true
case _ => false
} // 输出结果
patternMatchedRdd.collect().foreach { case (key, value) =>
println(s"Key: $key, Value: $value")
} // 停止 SparkContext
sc.stop()
}
}

如何在Spark键值对数据中,对指定的Key进行输出/筛选/模式匹配的更多相关文章

  1. JAVA整合Redis使用redisTemplate清除库中的所有键值对数据

    JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...

  2. Spark 键值对RDD操作

    键值对的RDD操作与基本RDD操作一样,只是操作的元素由基本类型改为二元组. 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键或跨界点重新进行数 ...

  3. Android系统编程入门系列之应用内键值对数据的简单保存

    在应用程序间及与用户的通信交互过程中,会产生并传递一系列数据.针对这些数据,有部分是只在应用程序中使用的缓存数据,还有一部分是在不同位置多次或长时间使用的持久化数据. 对于缓存数据来说,通常以代码中定 ...

  4. Spark基础:(三)Spark 键值对操作

    1.pair RDD的简介 Spark为包含键值对类型的RDD提供了一些专有的操作,这些RDD就被称为pair RDD 那么如何创建pair RDD呢? 在不同的语言中有着不同的创建方式 在pytho ...

  5. SharedPreferences使用(通过键值保存数据)

    保存数据到SharedPreferences中 要想使用SharedPreferences来存储数据, 首先需要获取到SharedPreferences对象. Android中主要提供了三种方法用于得 ...

  6. C# 键值对数据排序

    对于键值对的数据进行排序方法总结. /*使用排序字典,默认只支持升序 SortedDictionary<DateTime, String> dd = new SortedDictionar ...

  7. JavaScript获取Django模板中指定键值的数据,使用过滤器

    Django中利用js来操作数据的常规操作一般为点(.)操作符来获取字典或列表的数据,一般如{{data.0}},{{data.arg}} 但有时如果数据是嵌套类型的数据时,直接获取某个值就变得困难了 ...

  8. MyBatis返回Map键值对数据

    List<Map<String, String>> getMtypeList(); <select id="getMtypeList" resultT ...

  9. 利用 v-html 将后台数据中的换行符在页面输出

    在拿到后台传入的数据时:有些换行符,空格等会直接输出在页面   (/n .<br/> 等) 用  v-html 来解决: <div v-html="message" ...

  10. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

    本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...

随机推荐

  1. net8实现MediatR小示例C#

    MediatR是.net下的一个实现消息传递的库,简洁高效,它采用中介者设计模式,通过进程内消息传递机制,进行请求/响应.命令.查询.通知和事件的消息传递,可通过泛型来支持消息的智能调度,用于领域事件 ...

  2. 第 111 场双周赛 - 力扣(LeetCode)

    第 111 场双周赛 - 力扣(LeetCode) 2824. 统计和小于目标的下标对数目 - 力扣(LeetCode) 枚举即可 class Solution { public: int count ...

  3. Flex动态加载svg图片

    1.静态显示 在FLEX应用程序中可以使用SVG资源, 但只能象JPG和GIF那样作为一种图像引入, 而不包括SVG的一些高级特性, 而且无法在运行时加载, 只能在编译时静态加载,所以图片的大小无法改 ...

  4. 手把手教你搭建国产嵌入式模拟器SkyEye开发环境

    SkyEye介绍 SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目".SkyEye的目标是在通用的Linux和Windows平台上实现一个 ...

  5. JavaScript设计模式样例十三 —— 模版方法模式

    模板方法模式(Template Method Pattern) 定义:一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.目的:一些方法通用 ...

  6. 【VMware VCF】VCF 5.2:部署整合架构的SDDC。

    VMware 前不久发布了 VMware Cloud Foundation 5.2 版本,并带来了许多功能的升级,比如支持 vSAN Max 分解存储,管理工作负载域支持 vSAN ESA 延伸集群, ...

  7. Hexo-GitHub部署魔改第一步-config

    Hexo-GitHub部署魔改第一步_config.yml 1. config.yml # Hexo Configuration ## Docs: https://hexo.io/docs/confi ...

  8. mariadb5.5.56二进制离线安装

    在生产环境中一般使用发布好的二进制版本,简单概括一下安装过程: 1. 下载 地址为:https://downloads.mariadb.org/mariadb/5.5.56/ 这里选择最新版本的5.5 ...

  9. java_父类子类

    private 只有自身能访问自身 自身 同包子 不同包子类 同包类 其他类 可以访问 不能继承 不能继承 不能访问 不能访问 package/friendly/default == 不写 自身 同包 ...

  10. CSS & JS Effect – Do something on enter/leave window tab

    需求 我在做一个体验 当用户 submit enquiry 后会 window.open 开启 WhatsApp.而当用户关闭 WhatsApp 回来网站后,会 show 一个 feedback me ...