spark广播变量的使用(转)
环境:
ubuntu16.04 64
伪分布式
使用的spark是2.3.1
scala 2.11.8
参考连接:
https://blog.csdn.net/android_xue/article/details/79780463#commentsedit
注意,这篇博客是对上述参考链接的总结和概括.
一句话讲明,广播变量干嘛的?
就是你代码里的某个变量在程序运行时太耗内存了,所以丢到各个slave机子中弄一个备份,省得代码运行时传来传去的,就是为了省一下内存以及传递的耗时.
下面上代码,
1.不用广播变量的完整代码BroadcastTest1.scala:
import scala.collection.Map
import scala.collection.mutable.ArrayBuffer
import scala.util.Random
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.ml.recommendation.{ALS, ALSModel}
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
import org.apache.spark.sql.functions._
import org.apache.log4j.Logger
import org.apache.log4j.Level
import org.apache.spark.sql.execution.datasources.textobject BroadcastTest
{def main(args: Array[String]): Unit = {Logger.getLogger("org").setLevel(Level.OFF)Logger.getLogger("akka").setLevel(Level.OFF)Logger.getRootLogger().setLevel(Level.ERROR) //这里是用来抑制一大堆log信息的. val spark = SparkSession.builder.appName("Intro").config("spark.master", "local").getOrCreate();spark.sparkContext.setLogLevel("ERROR")val list=List("hello java lalala")val linesRDD= spark.read.textFile("hdfs://master:9000/test/word.txt")linesRDD.filter(line=>{list.contains(line)}).collect().foreach(println)}
}
运行方法:
1.启动Hadoop的HDFS系统
2.hdfs dfs -put word.txt hdfs://master:9000/test/
3.scalac BroadcastTest1.scala
4.scala BroadcastTest
当然,这里也可以采用maven打包用spark-submit来运行
2.用广播变量的完整代码BroadcastTest2.scala:
import scala.collection.Map
import scala.collection.mutable.ArrayBuffer
import scala.util.Random
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.ml.recommendation.{ALS, ALSModel}
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
import org.apache.spark.sql.functions._
import org.apache.log4j.Logger
import org.apache.log4j.Level
import org.apache.spark.sql.execution.datasources.textobject BroadcastTest
{def main(args: Array[String]): Unit = {Logger.getLogger("org").setLevel(Level.OFF)Logger.getLogger("akka").setLevel(Level.OFF)Logger.getRootLogger().setLevel(Level.ERROR) //这里是用来抑制一大堆log信息的. val spark = SparkSession.builder.appName("Intro").config("spark.master", "local").getOrCreate();val sc = spark.sparkContextsc.setLogLevel("ERROR")val list=List("hello java lalala")val broadcast=sc.broadcast(list)val linesRDD= spark.read.textFile("hdfs://master:9000/test/word.txt")linesRDD.filter(line=> {broadcast.value.contains(line)}).collect().foreach(println)spark.stop()//这里也可以使用sc.stop()}}
运行方法:
1.启动Hadoop的HDFS系统
2.hdfs dfs -put word.txt hdfs://master:9000/test/
3.scalac BroadcastTest2.scala
4.scala BroadcastTest
当然,这里也可以采用maven打包用spark-submit来运行
spark广播变量的使用(转)相关推荐
- Spark广播变量实现原理及基础编程
Spark广播变量实现原理及基础编程 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的 ...
- Spark广播变量使用示例
Spark广播变量使用示例 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的只读查询表 ...
- Spark广播变量之超大表left join小表时如何进行优化以及小表的正确位置
Spark广播变量之大表left join小表时如何进行优化以及小表的正确位置放置,带着这个目标我们一探究竟. 项目场景: 最近工作中遇到一个场景: 有一个超大表3.5T和一个小表963K 需要做关联 ...
- spark广播变量的原理_spark使用广播变量
import java.io.{File, FileReader} import java.util import org.apache.spark.SparkConf import org.apac ...
- spark 广播变量大数据_Spark基础知识(三)--- Spark的广播变量和累加器
在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并且这些 ...
- spark广播变量 和 累加器
1 为什么使用广播变量 和 累加器 变量存在的问题:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的 ...
- spark学习-Spark广播变量与共享变量(1)
1,概念 ###1.1 广播变量: 广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量.广播变量可被用于有效地给每个节点一个大输入数据集的副本.Spark还尝试使用高效地广播 ...
- Spark 广播变量和累加器
Spark 的一个核心功能是创建两种特殊类型的变量:广播变量和累加器 广播变量(groadcast varible)为只读变量,它有运行SparkContext的驱动程序创建后发送给参与计算的节点.对 ...
- Spark广播变量与累加器
在之前的文章中,我介绍了flink广播状态,从而了解了flink广播状态实际上就是将一个流广播到下游所有算子之中.在本文中我将介绍spark中类似的概念,为了方便理解,先放张spark应用程序架构图. ...
最新文章
- AngularJS安装配置与基础概要整理(上)
- BagNet超越 AlexNet,在ImageNet 上实现最先进结果!
- RealSync异构热容灾解决方案
- (转)jQuery选择器总结
- Java向后不兼容历史的观察
- 云服务器的协议,云服务器协议
- head first java原文_Head First Java
- 初识 TensorFlow 旅程之一
- hibernate中get方法和load方法的根本区别
- 数据竞赛入门-金融风控(贷款违约预测)一、赛题介绍
- butterknife 不能绑定错误
- HDOJ(HDU) 1860 统计字符
- linux网卡参数配置方法,Linux网卡参数配置方法教程
- 眼部卸妆液行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 中国大学MOOC公开信息收集
- mysql alter 改密码_MySql修改密码
- IDC FutureScape:全球智慧城市2019年预测 - 中国启示
- TechSmith Camtasia2022屏幕视频录像
- 生于MVP,死于PMF
- 手把手教学IOS自定义cell-仿微信消息列表
热门文章
- Centos 7安装gvim
- The Distinguish of the share or static lib in MFC
- XCTF-MISC-新手区:give_you_flag
- ambari集成mysql_Ambari 安装配置 MySql
- Springboot @Value获取配置文件中的值失效
- Eclipse + Pydev开发Python时import报错解决方法
- AI:狄拉克之海上的涟漪
- delphi 安卓图片保存数据库_delphi 把图片存入数据库
- fiddler怎么修改服务器返回参数并发送
- linux 从命令行自动识别文件并将其打开的命令