运行环境
本文的具体运行环境如下:
- CentOS 7.6
- Spark 2.4
- Hadoop 2.6.0
- Java JDK 1.8
- Scala 2.10.5
一、下载安装
首先在官网
https://spark.apache.org/downloads.html
下载对应版本的Spark
丢到你的服务器上 自己的路径 比如 /user/hadoop/My_Spark
解压
tar -xvf XXX.tar.gz(你的压缩包名称)
然后 记录你的 路径 /user/hadoop/My_Spark/spark-2.4.0-bin-hadoop2.7
配置spark用户权限
sudo chown -R hadoop:hadoop ./spark # 此处的 hadoop 为你的用户名 ./spark为你的路径名
安装后,需要在 ./conf/spark-env.sh 中修改 Spark 的 Classpath,执行如下命令拷贝一个配置文件:
- cd /user/hadoop/My_Spark/spark-2.4.0-bin-hadoop2.7
- cp ./conf/spark-env.sh.template ./conf/spark-env.sh
编辑 ./conf/spark-env.sh(vim ./conf/spark-env.sh
) ,在最后面加上如下一行:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
保存后,Spark 就可以启动运行了。
当然 还少不了设置环境变量
vi ~/.bash_profile
在最后加入
# spark
export SPARK_HOME= (你的Spark路径)
export PATH=$PATH:$SPARK_HOME/bin
运行 Spark 示例
注意,必须安装 Hadoop 才能使用 Spark,但如果使用 Spark 过程中没用到 HstudentS,不启动 Hadoop 也是可以的。此外,接下来教程中出现的命令、目录,若无说明,则一般以 Spark 的安装目录(/usr/local/spark)为当前路径,请注意区分。
在 ./examples/src/main 目录下有一些 Spark 的示例程序,有 Scala、Java、Python、R 等语言的版本。我们可以先运行一个示例程序 SparkPi(即计算 π 的近似值),执行如下命令:
- cd /user/hadoop/My_Spark/spark-2.4.0-bin-hadoop2.7 #你的路径
- ./bin/run-example SparkPi
通过 Spark Shell 进行交互分析
Spark shell 提供了简单的方式来学习 API,也提供了交互的方式来分析数据。Spark Shell 支持 Scala 和 Python,本教程选择使用 Scala 来进行介绍。
Scala
Scala 是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。它平滑地集成了面向对象和函数语言的特性。Scala 运行于 Java 平台(JVM,Java 虚拟机),并兼容现有的 Java 程序。
Scala 是 Spark 的主要编程语言,如果仅仅是写 Spark 应用,并非一定要用 Scala,用 Java、Python 都是可以的。使用 Scala 的优势是开发效率更高,代码更精简,并且可以通过 Spark Shell 进行交互式实时查询,方便排查问题。
执行如下命令启动 Spark Shell:
- ./bin/spark-shell
Shell 命令
启动成功后如图所示,会有 “scala >” 的命令提示符。
成功启动Spark Shell
基础操作
Spark 的主要抽象是分布式的元素集合(distributed collection of items),称为RDD(Resilient Distributed Dataset,弹性分布式数据集),它可被分发到集群各个节点上,进行并行操作。RDDs 可以通过 Hadoop InputFormats 创建(如 HstudentS),或者从其他 RDDs 转化而来。
我们从本地路径读取一个预先准备好的student.txt文件
student.txt 文件内容如下 有四个字段 id name age score
在交互式窗口中输入
import org.apache.spark.sql.types._import org.apache.spark.sql.SparkSessionval spark=SparkSession.builder().getOrCreate()val student = spark.read.option("header", true).option("delimiter",",").csv("file:///user/hadoop/run/student.txt")
这里student是 spark的一个DataFrameReader 也就是RDD DataFrame 通过读取本地文件获得的。
整个相当于一个临时的表
我们这里以CSV格式读入 分隔符为 , 然后首行开启
代码中通过 “file://” 前缀指定读取本地文件。Spark shell 默认是读取 HstudentS 中的文件,需要先上传文件到 HstudentS 中,否则会有“org.apache.hadoop.mapred.InvalidInputException: Input path does not exist:”的错误。
DataFrame基本动作运算
show展示数据
可以用show() 方法来展示数据,show有以下几种不同的使用方式:
show():显示所有数据
show(n) :显示前n条数据
show(true): 最多显示20个字符,默认为true
show(false): 去除最多显示20个字符的限制
show(n, true):显示前n条并最多显示20个自负
student.show() student.show(3) student.show(true) student.show(false) student.show(3,true)
输入
student.show(student.count().toInt)
按成绩倒序排序输出
输入
student.sort(student("score").desc).show(student.count().toInt)
describe(cols: String*):获取指定字段的统计信息
这个方法可以动态的传入一个或多个String类型的字段名,结果仍然为DataFrame对象,用于统计数值类型字段的统计值,比如count, mean, stddev, min, max等。
求平均分数并输出
单个DataFrame操作
使用where筛选条件
where(conditionExpr: String):SQL语言中where关键字后的条件 ,传入筛选条件表达式,可以用and和or。得到DataFrame类型的返回结果, 比如我们想得到用户1或者使用助手1的操作记录:
student.where("user=1 or type =‘助手1‘").show()
或者如上图
student.describe("score").where("summary =‘mean‘").show()
select:获取指定字段值
根据传入的String类型字段名,获取指定字段的值,以DataFrame类型返回,比如我们想要查找user和type两列:
student.select("user","type").show()
其他的常用操作自己看文档就行,女加微信男自强。本次教程暂时到此结束。
退出
:quit
原文地址:https://www.cnblogs.com/baiyunwanglai/p/10243454.html