spark广播变量的原理_spark使用广播变量

本文介绍如何使用Apache Spark的SparkSession和Broadcast功能,实现在大数据处理中过滤敏感数据的过程。通过读取文件中的黑名单词汇,并将其作为广播变量应用,对文本数据进行实时校验并只保留非敏感内容。
摘要由CSDN通过智能技术生成

import java.io.{File, FileReader}

import java.util

import org.apache.spark.SparkConf

import org.apache.spark.broadcast.Broadcast

import org.apache.spark.sql.SparkSession

import scala.collection.mutable.ArrayBuffer

object SparkTest{

// 使用广播变量过滤 敏感数据

def main(args: Array[String]): Unit = {

val conf = new SparkConf().setMaster("local[2]").setAppName("test")

val spark = SparkSession.builder().config(conf).getOrCreate()

spark.sparkContext.setLogLevel("WARN")

//计算逻辑

compute(spark)

spark.stop()

}

def compute(spark:SparkSession):Unit ={

import spark.implicits._

//加载过敏词汇并存储到 ArrayList 中

val filterDataPath = "G:\\tmp\\b.txt"

val al = new util.ArrayList[String]()

val reader = new java.io.BufferedReader(new FileReader(new File(filterDataPath)))

while (reader.ready()){

val str = reader.readLine()

str.split(" ").foreach(al.add(_))

}

val broadcast: Broadcast[util.ArrayList[String]] = spark.sparkContext.broadcast(al)

spark.sparkContext.textFile("G:\\tmp\\a.txt")

.mapPartitions(ite =>{

// 对源数据进行切割分词,并对每个词进行校验,符合要求的词汇添加到ArrayBuffer中

val arr = ArrayBuffer[String]()

val filterWord:util.ArrayList[String] = broadcast.value

ite.foreach(line => {

line.split(" ").foreach(word => {

if( !filterWord.contains(word) ) arr.+=(word)

})

})

arr.toIterator

})

.collect

.foreach(println)

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值