Spark3学习入门【基于Java】
Spark 是离线数据处理的一种大数据技术,和Flick相比数据处理要延后,因为Flick是实时数据处理,而Spark需要先读取数据到内存。
Spark的库是基于Scala写的,虽然Scala也是运行在jvm上的,但是Spark提供的Java api的能力和原生api并不完全相同,据说执行效率也有微弱差异。
但是scala语法比较难,编码也不如Java规范,用的人和企业越来越少。为了更好推广和更好交接,我们也选择Java API。
环境搭建
要用spark的库有两种方法:官方下载或maven依赖。
官方下载
到apache下载网站 Downloads | Apache Spark 点击链接下载

下载后解压到某位置。比如我放在 D:\Programs\spark-3.2.0-bin-hadoop3.2,这里就是SPARK_HOME,可以加到系统的环境变量里。
里面的bin是可执行文件和脚本,jar就是Java的api包:

里面有200+个jar,其中以spark开头的有21个。使用的时候把这个jar目录或者里面特定的jar包引入到项目即可:

maven依赖进来
在上面的下载页面可以同时看到maven的坐标

依赖进来
- </dependencies><dependencies>
- <dependency>
<!-- Spark dependency --> - <groupId>org.apache.spark</groupId>
- <artifactId>spark-core_2.12</artifactId>
- <version>3.2.0</version>
- </dependency>
- </dependencies>
spark-core只是spark的核心和最重要的部分,但是它一般不能独立使用。它里面定义了spark的工作流程和算法,比较底层,提供给其他spark模块使用。
安装hadoop
spark不少功能都是依赖hadoop的,因为spark不提供数据存储的能力(它提供的能力是和map-reduce阶段类似的),那它读取的数据通常都是hdfs来的(当然也可以从其他路径来)。为了以后方便,可以提前安装好hadoop。
从spark下载页面可以看到,和我们这个版本搭配的hadoop是版本3.3。
Hadoop下载页面是 Apache Hadoop,下载后解压到特定目录,并添加环境变量HADOOP_HOME。
小试牛刀
- 通过IDEA创建一个Maven项目,引入jar包或通过maven导入:<dependencies>
- <dependency>
<!-- Spark dependency --> - <groupId>org.apache.spark</groupId>
- <artifactId>spark-sql_2.12</artifactId>
- <version>3.2.0</version>
- </dependency>
- </dependencies>
注意这里引入的是最常用的spark-sql包,解压目录里也能找到。sql模块提供了数据帧和数据集 DataFrame和DataSet的处理,针对的是结构化数据。
> 除了sql模块,还有streaming模块处理流式计算,MLlib处理机器学习,和处理图数据的GraphX。可能有之前就接触过spark的会说RDD,著名的弹性分布式数据集,这个已经过时了,被spark-sql取代

编写程序:
- import org.apache.spark.sql.SparkSession;
- import org.apache.spark.sql.Dataset;
- public
class SimpleApp { - public
static
void main(String[] args) { - String logFile = "D:\\Programs\\spark-3.2.0-bin-hadoop3.2\\README.md";
- SparkSession spark = SparkSession.builder().appName("Simple Application").master("local").getOrCreate();
- Dataset<String> logData = spark.read().textFile(logFile).cache();
- rr
- String a1 = "scala";
- String a2 = "Scala";
- long numAs = logData.filter((org.apache.spark.api.java.function.FilterFunction<String>) s -> s.contains(a1)).count();
- long numBs = logData.filter((org.apache.spark.api.java.function.FilterFunction<String>) s -> s.contains(a2)).count();
- System.out.println("Lines with " + a1 + ": " + numAs + ", lines with " + a2 + ": " + numBs);
- spark.stop();
- }
- }
程序运行
执行上面的main方法就可以看到控制台打印出某个文件里有某个单词的行数。
> 这个程序经过我的改造,官方 Quick Start - Spark 3.2.0 Documentation (apache.org) 给的例子直接运行会报错,连编译都报错。另外只能使用Java8,刚开始使用的java 16总报错也修不好。
任务提交
spark运行的都是一个个任务,需要提交给spark环境。接下来我们把项目打包成jar提交给spark。
执行mvn package,就会在target目录下生成Jar包。拿到它的绝对路径

通过SPARK_HOME\bin\spark-submit.bat来提交:
.\bin\spark-submit --class "SimpleApp" --master local[4] 绝对路径.jar

这样可以执行完并打印计数,但是我本地会报错,执行完的时候要删除零时文件删不掉

在IDEA中可以成功删掉,在cmd中用管理员也删不掉

下一步
接下来开始学习spark sql和spark streaming。
学习网站:Spark SQL and DataFrames - Spark 3.2.0 Documentation (apache.org)
学习视频:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili
Spark3学习入门【基于Java】的更多相关文章
- Spark3学习【基于Java】3. Spark-Sql常用API
学习一门开源技术一般有两种入门方法,一种是去看官网文档,比如Getting Started - Spark 3.2.0 Documentation (apache.org),另一种是去看官网的例子,也 ...
- 带领技术小白入门——基于java的微信公众号开发(包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证)
微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服 ...
- 每天进步一点点-深度学习入门-基于Python的理论与实现 (2)
今天要补上两天的 不补了,新手,看的比较慢-- 手写识别例子跳过先 思考如何实现数字5的识别 三种方法: 训练数据:学习,寻找最优解 测试数据:评价模型能力. 损失函数:以损失函数为线索寻找自由权重参 ...
- Spring入门学习笔记(2)——基于Java的配置
目录 基于Java的配置 @Configuration & @Bean Annotations Example 注入Bean依赖 @Import注解 Lifecycle Callbacks(声 ...
- 基于java的设计模式入门(1)——为什么要学习设计模式
大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...
- Spring入门(8)-基于Java配置而不是XML
Spring入门(8)-基于Java配置而不是XML 本文介绍如何应用Java配置而不是通过XML配置Spring. 0. 目录 声明一个简单Bean 声明一个复杂Bean 1. 声明一个简单Bean ...
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- JavaSE入门学习6:Java基础语法之运算符和语句(上)
继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...
随机推荐
- dinic板子
loj上偷学长的( 注意几点: id初值赋1才能让正向弧反向弧对应起来 很多题要拆点,一定保证空间 dfs里rest=0的终止条件不能放在for循环里 #include<cstdio> # ...
- TensorFlow从入门到入坑(2)
TensorFlow学习(2) 一.jupyter notebook的安装和使用 1. 什么是jupyter notebook jupyter notebook(http://jupyter.org/ ...
- .NET 生态系统的蜕变之 .NET 6
.NET 6 是自.NET 4 框架以来生态系统看到的最大版本更新,虽然.NET Core 是2014年开始非常大的一项重大战略举措,但是.NET 6是真正的具有强大动力的非常重要的版本. 2021年 ...
- Nginx高级特性实操
导读 nginx从入门到精通,点我直达 下载nginx与安装 点我直达 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl opens ...
- 攻防世界 Misc 新手练习区 如来十三掌 Writeup
攻防世界 Misc 新手练习区 如来十三掌 Writeup 题目介绍 题目考点 佛曰加密.base64.Rot13等加密方法的了解 Writeup 下载并打开附件 联想到佛曰加密,复制内容到 佛曰加密 ...
- 【python】使用python十分钟创建个人聊天机器人教程
以青云客和图灵机器人接口示范python创建个人聊天机器人教程 一.以青云客聊天机器人为例示范get请求 官方网址:http://api.qingyunke.com/ 1.接入指引 请求地址 http ...
- 删除html标签,取其中的文本
public String removeHtmlTags() { String str = "<p><b> welcome to test</b>< ...
- shiro550反序列化分析
拖了很久的shiro分析 漏洞概述 Apache Shiro <= 1.2.4 版本中,加密的用户信息序列化后存储在Cookie的rememberMe字段中,攻击者可以使用Shiro的AES加密 ...
- 解决一个C#中定时任务被阻塞问题
解决一个C#中定时任务被阻塞问题 目录 解决一个C#中定时任务被阻塞问题 1.摘要 2.C#中定时任务的最简方法 3.定时任务阻塞现象 4.阻塞现象原因分析 5.问题解决 1.摘要 本文会介绍一个C# ...
- Navicat15最新版本破解 亲测可用!!!(Navicat Premium 注册出现 No All Pattern Found! File Already Patched)
1.下载Navicat Premium官网https://www.navicat.com.cn/下载最新版本下载安装 2.本人网盘链接:https://pan.baidu.com/s/1ncSaxId ...