首页 > 其他分享 >如何在Spark键值对数据中,对指定的Key进行输出/筛选/模式匹配

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

时间:2024-09-09 11:46:58浏览次数:4  
标签:SparkContext Key val filter 键值 key Spark

在用键值对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()
  }
}

标签:SparkContext,Key,val,filter,键值,key,Spark
From: https://www.cnblogs.com/h4o3/p/18404233

相关文章

  • Android开发 - Map 键值对链表的使用解析
    创建和初始化MapHashMap:常用的实现类,基于哈希表Map<String,Integer>map=newHashMap<>();LinkedHashMap:保持插入顺序的实现类Map<String,Integer>map=newLinkedHashMap<>();TreeMap:基于红黑树,按键的自然顺序或提供的比较器排序Map<String,Integer>map=......
  • Cooley-Tukey FFT算法的非递归实现
    一维情况#include<iostream>#include<complex>#include<cmath>constdoublePI=3.14159265358979323846;//交换位置voidswap(std::complex<double>&a,std::complex<double>&b){std::complex<double>temp=a......
  • Keycloak 报 failed to initialize keycloak
    在访问Keycloak的Account页面时,提示下列信息:在浏览器开发者工具的Network中看到下列403请求错误:报错解法经过查找(关键词failedtoinitializekeycloak403),在此帖子中找到了答案,需要在Client>AccountConsole中修改下列配置:在WebOrigins中设置“*”,默认此处为空。......
  • 复制Monkeytype:如何创建一个高效的打字练习应用
    要想创建一个高效的打字练习应用,核心在于打造一个用户友好、功能全面且富有互动性的体验。Monkeytype作为一个备受欢迎的打字练习平台,为许多人提高打字速度和准确率提供了帮助。如何复制Monkeytype的成功经验,打造一个类似的高效打字练习应用呢?界面设计是关键。一个好的打字练习应......
  • INSERT ... ON DUPLICATE KEY UPDATE 问题记录
    起因:需要新增复制数据并更新原数据状态,故采用INSERT...ONDUPLICATEKEYUPDATE的方式来插入和更新数据问题:数据插入及更新异常环境:MySQL5.7.32数据表结构:点击查看代码CREATETABLE`example_table`(`col_a`varchar(255)NOTNULL,`col_b`varchar(255)NOTN......
  • Keysight U8031A DC power supply
    KeysightU8031ADCpowersupply文章目录KeysightU8031ADCpowersupply前言电容充电⽰意图一、恒定电压操作二、恒定电流操作三、5v操作四、跟踪模式操作五、存储器操作六、对过电压保护编程七、对过电流保护编程八、锁键操作前言U8031APowerSupply是一款......
  • react 学习之从diff children看key的合理使用
    大部分优化环节react都自己在内部处理了,但有一种情况也值得开发者注意,那就是列表中key的使用,合理的使用key有助于能精确的找到用于新旧节点复用的老节点。那么我们这里来学习下react是如何diffchildren的,从源码的角度看。用几个案例来描述ReactdiffChild核心流程,react在一次更......
  • 判断两个map的key 是否完全一致,key完全一致的情况下 判断key对应的值是否一致,一致返回
    你可以通过以下代码来判断两个Map的键是否完全一致,并且键对应的值是否一致:importjava.util.Map;publicclassMapComparer{publicstatic<K,V>booleanareMapsEqual(Map<K,V>map1,Map<K,V>map2){if(map1.size()!=map2.size()){retur......
  • AT_keyence2019_e Connecting Cities 题解
    B算法萌萌题。题解看到完全图求最小生成树,必然是要考虑一下B算法能不能做的。发现这个题的联通块最小值是可以维护的。我们发现。假如我们钦定\(i\)往前面连。那么前面的最小权值必然是一个固定的值。我们一定会连到\(\min(a_j-j\timesD)\)上。由于不能连到自己......
  • spark为什么比mapreduce快?
    spark为什么比mapreduce快?首先澄清几个误区:1:两者都是基于内存计算的,任何计算框架都肯定是基于内存的,所以网上说的spark是基于内存计算所以快,显然是错误的2;DAG计算模型减少的是磁盘I/O次数(相比于mapreduce计算模型而言),而不是shuffle次数,因为shuffle是根据数据重组的次数而定,所以shu......