spark的广播变量
直接上代码:
包含了,map,filter,persist,mapPartitions等函数
String master = "spark://192.168.2.279:7077";
// jsc = getContext("local[2]");
jsc = getContext(master);
sqlContext = new SQLContext(jsc);
connectionProperties = new Properties();
connectionProperties.put("user", user);
connectionProperties.put("password", password);
connectionProperties.put("driver", "com.mysql.jdbc.Driver");
// emrdataIndedx(filePath, jsc, sqlContext);//加载emrdataindex数据到mysql
JavaRDD<String> javaRDD = jsc.textFile(filePath);
String[] fields = {"pk_dcpv", "code_pvtype", "name_pvtype", "code_ord", "empi", "code_sex"
, "name_sex", "birthday", "age", "code_dept", "name_dept", "bed", "pk_dcordrisreq"
, "code_req", "code_rep", "code_rep_type", "name_rep_type", "code_state", "name_state"
, "code_eu_type", "name_eu_type", "code_eu_item", "name_eu_item", "code_part"
, "name_part", "create_time", "code_pres", "parent_code"};
String[] old_type = {"D", "GYN", "X ", "MR ", "L05", "L04",
"L12", "B ", "OTHC", "DOS", "ECG", "CT ", "UIS", "L02",
"RIS", "SY ", "CB ", "L01", "ENT", "L03", "EYE", "NSC",
"L07", "EMG", "NEU", "PTH", "DC", "INF", "GC", "L08",
"L09", "BD", "L26", "ECT", "GM", "GP", "L10", "EDO",
"L11", "DER", "EEG", "URO", "PFT", "L25", "RF", "OTH",
"PIS", "PMR", "PSY", "MPL", "BM", "Z", "EIS", "BED", "BLD",
"L27", "FOD", "R", "GYP", "CTD", "BDT", "L99", "EUS", "HNS",
"L91", "SED", "L28", "F", "IED", "FOW", "L31", "OO", "P01", "L13"};
//广播变量
final Broadcast<String[]> broadcast = jsc.broadcast(old_type);
StructType schema = createStructType(fields);
JavaRDD<Row> mapPartitions1 = javaRDD.mapPartitions(new FlatMapFunction<Iterator<String>, Row>() {
private static final long serialVersionUID = 1L;
ObjectMapper mapper = new ObjectMapper(); @SuppressWarnings("unchecked")
public Iterator<Row> call(Iterator<String> iterator)
throws Exception {
ArrayList<Row> arrayList = new ArrayList<Row>();
// TODO Auto-generated method stub
while (iterator.hasNext()) {
try {
String next = iterator.next();
map_t = mapper.readValue(next, Map.class);
for (Entry<String, Object> entry : map_t.entrySet()) {
map_s.put(entry.getKey(), String.valueOf(entry.getValue()));
}
} catch (Exception e) {
return null;
}
Row createOrdPart3Row = createOrdPart3Row(map_s);
arrayList.add(createOrdPart3Row); }
return arrayList.iterator();
}
});
JavaRDD<Row> mapPartitions2 = mapPartitions1.filter(new Function<Row, Boolean>() {
private static final long serialVersionUID = 1L; public Boolean call(Row row) throws Exception {
// TODO Auto-generated method stub
String pk_dcpv1 = row.getString(0);
String code_pvtype1 = row.getString(1);
String code_rep_type1 = row.getString(15);
return pk_dcpv1.split("_").length == 2
&& (!"".equals(code_pvtype1) || null != code_pvtype1 || !"P".equals(code_pvtype1))
&& Arrays.asList(broadcast.value()).contains(code_rep_type1);
}
});
//broadcast不用就销毁
broadcast.destroy();
JavaRDD<Row> mapPartitions = mapPartitions2.repartition(100);
JavaRDD<Row> persist = mapPartitions.persist(StorageLevel.MEMORY_AND_DISK_SER());
JavaRDD<Row> filter1 = persist.filter(new Function<Row, Boolean>() {
private static final long serialVersionUID = 1L; public Boolean call(Row row) throws Exception {
// TODO Auto-generated method stub
return row.getString(0).startsWith("1");
}
});
spark的广播变量的更多相关文章
- 【Spark篇】---Spark中广播变量和累加器
一.前述 Spark中因为算子中的真正逻辑是发送到Executor中去运行的,所以当Executor中需要引用外部变量时,需要使用广播变量. 累机器相当于统筹大变量,常用于计数,统计. 二.具体原理 ...
- Spark共享变量(广播变量、累加器)
转载自:https://blog.csdn.net/Android_xue/article/details/79780463 Spark两种共享变量:广播变量(broadcast variable)与 ...
- Spark学习之路 (四)Spark的广播变量和累加器
一.概述 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上 ...
- Spark的广播变量模块
有人问我,如果让我设计广播变量该怎么设计,我想了想说,为啥不用zookeeper呢? 对啊,为啥不用zookeeper,也许spark的最初设计哲学就是尽量不使用别的组件,他有自己分布式内存文件系统, ...
- Spark学习之路 (四)Spark的广播变量和累加器[转]
概述 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并 ...
- Spark(八)【广播变量和累加器】
目录 一. 广播变量 使用 二. 累加器 使用 使用场景 自定义累加器 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的 ...
- Spark大师之路:广播变量(Broadcast)源代码分析
概述 近期工作上忙死了--广播变量这一块事实上早就看过了,一直没有贴出来. 本文基于Spark 1.0源代码分析,主要探讨广播变量的初始化.创建.读取以及清除. 类关系 BroadcastManage ...
- Spark RDD持久化、广播变量和累加器
Spark RDD持久化 RDD持久化工作原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中.当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition持久化到内 ...
- 【Spark调优】Broadcast广播变量
[业务场景] 在Spark的统计开发过程中,肯定会遇到类似小维表join大业务表的场景,或者需要在算子函数中使用外部变量的场景(尤其是大变量,比如100M以上的大集合),那么此时应该使用Spark的广 ...
随机推荐
- python爬取盘搜的有效链接
因为盘搜搜索出来的链接有很多已经失效了,影响找数据的效率,因此想到了用爬虫来过滤出有效的链接,顺便练练手~ 这是本次爬取的目标网址http://www.pansou.com,首先先搜索个python, ...
- go String方法的实际应用
让 IPAddr 类型实现 fmt.Stringer 以便用点分格式输出地址. 例如,`IPAddr{1,`2,`3,`4}` 应当输出 `"1.2.3.4"`. String() ...
- 细说浏览器输入URL后发生了什么
本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接: 7.浏览器解析HTML: 8.浏览器布局渲染: 总结 ...
- PowerBuilder学习笔记之2PowerScript语言(三)
教材地址:https://wenku.baidu.com/view/1e82d26925c52cc58ad6be05.html?sxts=1565679996440 2.6嵌入式SQL语句 2.6.1 ...
- Powershell学习笔记:(一)、初识Powershell
什么是Powershell? MSDN上的说明是:PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言. PowerShell 可帮助系统管理员和高级用户快速自动执行用 ...
- springboot笔记04——读取配置文件+使用slf4j日志
前言 springboot常用的配置文件有yml和properties两种,当然有必要的时候也可以用xml.我个人更加喜欢用yml,所以我在这里使用yml作为例子.yml或properties配置文件 ...
- Python——初识网络爬虫(网页爬取)
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫 ...
- 后台对象转JSON字符串传到前台,前台JSON字符串转对象绑定标签赋值
/// <summary> /// 创建换货单-自动获取对应的数据(后端) /// </summary> [HttpGet] public ActionResult GetPr ...
- null和空的区别
python中None和Null的区别 首先了解python对象的概念 python中,万物皆对象,所有的操作都是针对对象的. 那什么是对象?5是一个int对象,‘oblong’是一个str对象,异常 ...
- Django drf: 跨域机制
一.同源策略 二.CORS(跨域资源共享)简介 三.CORS基本流程 四.CORS两种请求流程 五.Django项目中支持CORS 一.同源策略 同源策略是一种约定,它是浏览器最核心的最基本的安全功能 ...