[Spark Core] Spark 使用第三方 Jar 包的方式
0. 说明
Spark 下运行job,使用第三方 Jar 包的 3 种方式。
1. 方式一
将第三方 Jar 包分发到所有的 spark/jars 目录下

2. 方式二
将第三方 Jar 打散,和我们自己的 Jar 包打到一起
类似的例子可以参考 在 Spark 集群上运行程序 中的打包部分
3. 方式三
在 spark-submit 命令中,通过 --jars 指定使用的第三方 Jar 包

【案例:使用 spark-shell 执行 taggen】
1. 启动 spark-shell,指定 fastjson 类库。
定位到 fastjson jar 包
D:\maven_repository\com\alibaba\fastjson\1.2.47\fastjson-1.2.47.jar
2. 启动spark-shell
spark-shell --master spark://s101:7077 --jars /home/centos/fastjson-1.2.47.jar
3. 定义函数 extractTag
// 定义函数,抽取标签列表
def extractTag(json: String) = {
import com.alibaba.fastjson.JSON
var list: scala.List[String] = Nil
// 将字符串解析成 json 对象
val obj = JSON.parseObject(json)
val arr = obj.getJSONArray("extInfoList")
if (arr != null && arr.size > 0) { // 得到数组的第一个 json 对象
val firstObj = arr.getJSONObject(0)
val values = firstObj.getJSONArray("values")
if (values != null && values.size > 0) {
var i = 0
while (i < values.size) {
val tag = values.getString(i)
list = tag :: list
i += 1;
}
}
}
list
}
4. 加载文件
// 1. 加载文件
val rdd1 = sc.textFile("/user/centos/temptags.txt")
5. 解析每行的 json 数据成为集合
// 2. 解析每行的json数据成为集合
val rdd2 = rdd1.map(line => {
val arr: Array[String] = line.split("\t")
// 商家id
val busid: String = arr(0)
// json
val json: String = arr(1)
val list: scala.List[String] = extractTag(json)
(busid, list)
})
6. 过滤空集合
// 3. 过滤空集合 (85766086,[干净卫生, 服务热情, 价格实惠, 味道赞])
val rdd3 = rdd2.filter(t => {
!t._2.isEmpty
})
7. 将值压扁
//4. 将值压扁
val rdd4 = rdd3.flatMapValues(list=>{
list
})
8. 滤除数字的tag
//5. 滤除数字的tag
val rdd5 = rdd4.filter(t=>{
try{
//
Integer.parseInt(t._2)
false
}
catch {
case _ => true
}
})
9. 标1成对
//6. 标1成对
val rdd6 = rdd5.map(t=>{
(t,1)
})
10. 聚合
//7. 聚合
val rdd7 = rdd6.reduceByKey(_+_)
11. 重组
//8. 重组
val rdd8 = rdd7.map(t=>{
(t._1._1,(t._1._2 , t._2)::Nil)
})
12. reduceByKey
//9. reduceByKey
val rdd9 =rdd8.reduceByKey(_ ::: _)
13. 分组内排序
//10. 分组内排序
val rdd10=rdd9.mapValues(list=>{
list.sortBy(t=>{
-t._2
}).take(5)
})
14. 商家间排序
//11. 商家间排序
val rdd11= rdd10.sortBy(t=>{
t._2(0)._2
} ,false)
15. collect
rdd11.collect()
16. 查看 Web UI
http://s101:8080/
17. DAG 视图

[Spark Core] Spark 使用第三方 Jar 包的方式的更多相关文章
- Ant打包可运行的Jar包(加入第三方jar包)
本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.al ...
- Android 升级ADT到22第三方Jar包导致的ClassNotFoundException和NoClassDefFoundError异常解决
在使用异步载入框架Android-Universal-Image-Loader的Jar包的时候遇到错误: java.lang.NoClassDefFoundError:com.nostra13.uni ...
- 如何在制作jar包时引用第三方jar包
我用的是Eclipse打包,但在CMD窗口执行的时候报“ActiveMQ.jar中没有主清单属性”错误. 在网上搜了下,这个与MANIFEST.MF文件有关,该文件没有定义MAIN方法所在类的路径,利 ...
- 解决对含有第三方jar包的项目打包出现java.lang.NoClassDefFoundError问题
用eclipse普通的打包方式,对含有第三方jar包的项目进行打包.调用方法后一只出现java.lang.NoClassDefFoundError问题. 从网上搜寻,很多都是在MANIFEST.MF文 ...
- [Android]proguard重新编译和如何不混淆第三方jar包
转载自:http://glblong.blog.51cto.com/3058613/1536516 一.ant安装.环境变量配置及验证 (一)安装ant 到官方主页http://ant.apache. ...
- eclipse将引用了第三方jar包的java项目打成jar包
今天用java开发了一个项目,想要打成jar包,并在linux环境下运行.但是运行时引用的第三方jar包却显示classNotFind错误. 于是查了一下解决办法,在此贴出来,方便以后查阅. 用Ecl ...
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...
- Eclipse导出可执行Java工程/可执行Jar文件(包含第三方Jar包)
1. 首先,右键你的Java工程,选择Export,在Java文件夹下选择Runnable JAR file,如下图所示: 2. 选择Runnable JAR file后,会弹出如下所示的对话框,选择 ...
- 使用Sonatype Nexus搭建Maven私服后如何添加第三方JAR包?
Sonatype Nexus简介 登录Nexus后,点击右侧的“Repositories”,显示当前Nexus所管理的Repository: 默认情况下Nexus为我们创建了以下主要的Reposito ...
随机推荐
- 资深程序员的Metal入门教程总结
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由落影发表于云+社区专栏 正文 本文介绍Metal和Metal Shader Language,以及Metal和OpenGL ES的差异 ...
- getInitParameter方法
在ServletConfig和ServletContext都有getInitParameter方法, 这两个方法的都能从web.xml中获取参数,但是是有区别的. 1. web.xml文件 <? ...
- 第一次项目上Linux服务器(六:Nginx安装及相关命令(转))
1.下载nginx 方法一 wget http://nginx.org/download/nginx-1.11.6.tar.gz 方法二 http://nginx.org/en/download.ht ...
- 访问 .obj文件,由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射
一.错误描述 HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 最可能的原因: 可 ...
- kooboocms遇到的问题
1.工作流:需要在网站的内容设置里启用工作流,然后添加一个工作流,再在内容文件夹里设置工作流属性(经测试,工作流对网络用户才有效,也就是说必须把用户添加到该网站下) 2.网络用户页面bug:在行 1. ...
- linux系统编程:获取glibc的版本号
我的环境是ubuntu16.04 glibc官网:http://www.gnu.org/software/libc/libc.html 方法一.一般来说,涉及到库调用的程序,在链接时候都会链接到gli ...
- HTML文字闪烁
<div id="blink">闪烁的文字</div> <script language="javascript"> fun ...
- JPA命名规则
jpa中方法的命名规则必须按照严格的要求来写.不能随便的命名方法名字,具体的方法操作如下. 参照方法地址:https://blog.csdn.net/csdnchen666666/article/de ...
- php判断是不是移动设备
<?php function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_ ...
- react单页面应用的Nginx配置问题
项目中多数使用react单页面开发,路由使用react-router的browser-router,这样页面访问路径看起来像是真实的,如http://xx.xxx.xxx/a/b.但当项目访问路径为多 ...