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 包的方式的更多相关文章

  1. Ant打包可运行的Jar包(加入第三方jar包)

    本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.al ...

  2. Android 升级ADT到22第三方Jar包导致的ClassNotFoundException和NoClassDefFoundError异常解决

    在使用异步载入框架Android-Universal-Image-Loader的Jar包的时候遇到错误: java.lang.NoClassDefFoundError:com.nostra13.uni ...

  3. 如何在制作jar包时引用第三方jar包

    我用的是Eclipse打包,但在CMD窗口执行的时候报“ActiveMQ.jar中没有主清单属性”错误. 在网上搜了下,这个与MANIFEST.MF文件有关,该文件没有定义MAIN方法所在类的路径,利 ...

  4. 解决对含有第三方jar包的项目打包出现java.lang.NoClassDefFoundError问题

    用eclipse普通的打包方式,对含有第三方jar包的项目进行打包.调用方法后一只出现java.lang.NoClassDefFoundError问题. 从网上搜寻,很多都是在MANIFEST.MF文 ...

  5. [Android]proguard重新编译和如何不混淆第三方jar包

    转载自:http://glblong.blog.51cto.com/3058613/1536516 一.ant安装.环境变量配置及验证 (一)安装ant 到官方主页http://ant.apache. ...

  6. eclipse将引用了第三方jar包的java项目打成jar包

    今天用java开发了一个项目,想要打成jar包,并在linux环境下运行.但是运行时引用的第三方jar包却显示classNotFind错误. 于是查了一下解决办法,在此贴出来,方便以后查阅. 用Ecl ...

  7. Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...

  8. Eclipse导出可执行Java工程/可执行Jar文件(包含第三方Jar包)

    1. 首先,右键你的Java工程,选择Export,在Java文件夹下选择Runnable JAR file,如下图所示: 2. 选择Runnable JAR file后,会弹出如下所示的对话框,选择 ...

  9. 使用Sonatype Nexus搭建Maven私服后如何添加第三方JAR包?

    Sonatype Nexus简介 登录Nexus后,点击右侧的“Repositories”,显示当前Nexus所管理的Repository: 默认情况下Nexus为我们创建了以下主要的Reposito ...

随机推荐

  1. 【一个小功能】点击图标/链接发起QQ临时会话

    有时候,我们需要实现在网页上点击一个QQ图标来实现QQ临时会话,这样不用添加好友,也能满足及时沟通的需求. 实现方案比较简单,只是为a标签修改href属性,代码如下 <a href=" ...

  2. Spring Aop AfterReturning接收返回值

    包结构: Spring.xml UserDao.java 测试类Main方法 LogAspect.java 测试结果: @AfterReturning标签属性分析: value值: 可以写Aop的表达 ...

  3. APIO 2018 游记

    上接CTSC 2018 游记 day1 早上大概八九点起来洗了个澡跑到隔壁寝发现 tj 还在??? 原来昨天晚上听错名字了... 下午一起去 wfj 王府井玩,陪李总逛逛奢侈品店... 走了两三个小时 ...

  4. django2.1---admin 修改模块的名字为中文显示

    只需要写两个地方 1.应用下的__init__.py default_app_config = 'user.apps.UserConfig' 2.应用下apps.py from django.apps ...

  5. NPOI 之导入导出

    转自https://www.cnblogs.com/zuowj/archive/2015/05/04/4475663.html转别人的,做了一点点改动 using NPOI.HSSF.UserMode ...

  6. SQL Server T—SQL 函数

    一 聚合函数(统计函数)!!!!! 计算个数   count(  )   select count(*) from 表名 求和  sum(  ) select sum(列名) from 表名 求平均数 ...

  7. 机器人数目-2015决赛Java语言C组第一题

    标题:机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中,A类含有:8个轮子,1个传感器B类含有: 6个轮子,3个传感器C类含有:4个轮子,4个传感器 他们一共订购了100套机器人,收到了轮子6 ...

  8. NIO学习笔记五:Buffer 的使用

    Java NIO中的Buffer用于和NIO通道进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffe ...

  9. ubuntu 18.04 设置固定ip

    # This file is generated from information provided by # the datasource.  Changes to it will not pers ...

  10. js知识学习图谱,新手必看

    前端新手学习也不外乎就是Html  css  html5  css3  这是最基本的,学会这些仅仅可以说是会写布局,写网页,不算前端开发,还有最重要的js,jq要学习,我自己java后台转前端,现在复 ...