在用键值对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. SparkConf 和 SparkContext:与之前示例相同,用于初始化 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. 第 358 场周赛 - 力扣(LeetCode)

    第 358 场周赛 - 力扣(LeetCode) 2815. 数组中的最大数对和 - 力扣(LeetCode) 双for遍历即可 class Solution { public: int maxSum ...

  2. 存储过程中调用EXECUTE IMMEDIATE的“权限不足”

    EXECUTE IMMEDIATE是Oracle中使用动态SQL的一种方法,可以直接执行,也可以在存储过程中调用.然而在存储过程中调用可能会遇到权限不足的问题,如在存储过程中执行重建索引语句: sql ...

  3. ubuntu 16.04 安装Python3.8虚拟环境

    virtualenv为应用提供了隔离的Python运行环境,可以解决不同应用间多版本的冲突问题. virtualenv会把用户指定版本的python复制到虚拟环境下,并修改相关的环境变量,使得pyth ...

  4. 【Markdown】之使用教程

    Markdown 教程 https://testerhome.com/markdown Guide 这是一篇讲解如何正确使用 Markdown 的排版示例,学会这个很有必要,能让你的文章有更佳清晰的排 ...

  5. uni-app 小程序用户信息之头像昵称填写

    小程序获取用户头像昵称,微信又叒做妖,废除之前的接口,改成了头像昵称填写 通知:微信小程序端基础库2.27.1及以上版本,wx.getUserProfile 接口被收回,详见<小程序用户头像昵称 ...

  6. 为什么MySQL 默认隔离级别是RR,又被阿里设置为RC

    我们知道,我们可以通过这个命令查看数据库当前的隔离级别,MySQL 默认隔离级别是RR. select @@tx_isolation; ANSI/ISO SQL定义的标准隔离级别有四种,从高到底依次为 ...

  7. 一步一步将PlantUML类图导出为自定义格式的XMI文件

    一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08 PlantUML官网: https://plantuml.com/zh/ PlantUML命令行 ...

  8. Unity中利用遗传算法训练MLP

    Unity中利用遗传算法训练MLP 梯度下降法训练神经网络通常需要我们给定训练的输入-输出数据,而用遗传算法会便捷很多,它不需要我们给定好数据,只需要随机化多个权重进行N次"繁衍进化&quo ...

  9. JWT单点登录

    单点登录 概念:登录某集团的某一产品之后,访问其他产品的网站时就会是登录状态,比如登录QQ之后,进入QQ游戏的时候就是登录过的状态,具体实现方法有以下: Redis+token实现单点登录: 生成一个 ...

  10. vue3项目部署到Github

    此教程适应于以webpack,vue-cli,vite等脚手架构建的vue项目.当然,vue2和vue3都是可以滴. 1. 前提:你的代码库已经提交到Github上 如果没有的话,请到GitHub上新 ...