0
点赞
收藏
分享

微信扫一扫

Spark 广播变量解析

  1. 广播变量
    广播变量理解图
    Spark 广播变量解析_apache
    数据源
科比
詹姆斯
乔丹
杜兰特
科比
詹姆斯
乔丹
杜兰特
  • scala代码
package examples

import org.apache.spark.{SparkConf, SparkContext}

/**
* @Author yqq
* @Date 2021/12/11 23:35
* @Version 1.0
*/
object BroadCastTest1 {
def main(args: Array[String]): Unit = {
val context = new SparkContext(
new SparkConf()
.setMaster("local")
.setAppName("test1")
)
context.setLogLevel("Error")
val blackName = List[String]("科比", "杜兰特")
val broadCastName = context.broadcast(blackName)
context.textFile("data/names")
.filter(e=>{
val value = broadCastName.value
!value.contains(e)
}).foreach(println)
}
}

Spark 广播变量解析_spark_02

  • java代码
package examples;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.broadcast.Broadcast;

import java.util.Arrays;
import java.util.List;

/**
* @Author yqq
* @Date 2021/12/11 23:16
* @Version 1.0
*/
public class BroadCastTest {
public static void main(String[] args) {
JavaSparkContext context = new JavaSparkContext(
new SparkConf()
.setMaster("local")
.setAppName("test")
);
context.setLogLevel("Error");
List<String> blackName = Arrays.asList("乔丹", "詹姆斯");//在Driver端
Broadcast<List<String>> listBroadcast = context.broadcast(blackName);
context.textFile("data/names",10)
.filter(e->{
List<String> value = listBroadcast.value();
return !value.contains(e);
}).foreach(e-> System.out.println(e));
// context.textFile("data/names",10).filter(e->{
// return !blackName.contains(e);//Excecutor端
// }).foreach(e-> System.out.println(e));
}
}

Spark 广播变量解析_apache_03
注意事项:

  • 能不能将一个 RDD 使用广播变量广播出去? 不能,因为 RDD 是不存储数据的。可以将 RDD 的结果广播出去
  • 广播变量只能在 Driver 端定义,不能在 Executor 端定义。
  • 在 Driver 端可以修改广播变量的值,在 Executor 端无法修改 广播变量的值。


举报

相关推荐

0 条评论