在用鍵值對RDD進行操作時,經常會遇到不知道如何篩選出想要資料的情況,這裡提供了一些解決方法
目錄
- 1、對固定的Key資料進行查詢
- 2、對不固定的Key資料進行模糊查詢
1、對固定的Key資料進行查詢
程式碼說明:
- SparkConf:配置 Spark 應用程式的一些基本資訊。
- SparkContext:建立 Spark 上下文以在 Spark 中執行操作。
- parallelize:生成一個包含多個鍵值對的初始 RDD。
- filter:使用
filter
方法篩選出 key 等於指定值的元素。 - collect:收集結果並在驅動程式上進行輸出。
- 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資料進行模糊查詢
程式碼說明:
- SparkConf 和 SparkContext:與之前示例相同,用於初始化 Spark 應用。
- parallelize:生成一個包含多個鍵值對的初始 RDD。
- filter:使用 Scala 的模式匹配功能來篩選出以字母
'a'
開頭的 keys。case (key, _) if key.startsWith("a")
:當 key 以'a'
開頭時,返回true
,否則返回false
。
- collect:收集結果並在驅動程式上進行輸出。
- 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()
}
}