赞
踩
1.
JDK部署
Spark是跑在JVM上,所以必须部署JDK
提供百度网盘的JDK下载地址:
64位操作系统:jdk-8u211-windows-x64.exe
https://pan.baidu.com/s/1EU1SM4h02Uj0fI-myzys9Q
*环境变量设置(在电脑输入高级环境变量--环境变量-系统变量)
系统变量新建:JAVA_HOME >> C:\Program Files\Java\jdk1.8.0_211
在PATH后面加入 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;注意分好
系统变量新建:CLASSPATH >> .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
参考:https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html
*测试
java -version
2.hadoop下载
step 1 : 从 (https://github.com/steveloughran/winutils)下载适合自己版本的文件;
step 2: 对该文件进行解压;
step 3: 配置环境变量:
①增加系统变量HADOOP_HOME,值是下载的zip包解压的目录,我这里
C:\Users\87671\Downloads\winutils-master\winutils-master\hadoop-2.7.1
②在系统变量path里增加%HADOOP_HOME%\bin
3.Spark部署
Spark 从官网上http://spark.apache.org/downloads.html
下载spark-2.4.1-bin-hadoop2.7 解压后 bin目录为可执行文件,conf目录为配置目录
注意文件名之间不要有空格
SPARK_HOME>>C:\Users\87671\Downloads\spark-2.4.3-bin-hadoop2\spark-2.4.3-bin-hadoop2\spark-2.4.3-bin-hadoop2.7
PATH >> ;%SPARK_HOME%\bin;%SPARK_HOME%;
4.python(可以通过anaconda)
python 与 spark关联
打开anaconda命令行findspark模块:pip install findspark
打开spark‘
- import findspark
- #可在环境变量中进行设置,即PATH中加入如下地址
- findspark.init("C:\\Users\\87671\\Downloads\\spark-2.4.3-bin-hadoop2\\spark-2.4.3-bin-hadoop2\\spark-2.4.3-bin-hadoop2.7")
- from pyspark import SparkContext as sc
- from pyspark import SparkConf as conf
第一个程序
-
- from pyspark.sql import SparkSession
- from pyspark import SparkContext
- from pyspark import SparkConf
-
- # 创建sc
- sc=SparkContext("local","Simple")
-
- #读取文件
- textFile = sc.textFile("E:/pythonWp/sparkWP/wordCount/word.txt")
- def contains(line):
- return 'hello' in line
- filterRDD = textFile.filter(contains)
- filterRDD.cache()
- filterRDD.count()
-
- counts=textFile.flatMap(lambda line: line.split(" ")) \
- .map(lambda word: (word, 1)) \
- .reduceByKey(lambda a, b: a + b)
- counts.foreach(print)
textFile包含了多行文本内容,textFile.flatMap(labmda line : line.split(” “))会遍历textFile中的每行文本内容,当遍历到其中一行文本内容时,会把文本内容赋值给变量line,并执行Lamda表达式line : line.split(” “)。line : line.split(” “)是一个Lamda表达式,左边表示输入参数,右边表示函数里面执行的处理逻辑,这里执行line.split(” “),也就是针对line中的一行文本内容,采用空格作为分隔符进行单词切分,从一行文本切分得到很多个单词构成的单词集合。这样,对于textFile中的每行文本,都会使用Lamda表达式得到一个单词集合,最终,多行文本,就得到多个单词集合。textFile.flatMap()操作就把这多个单词集合“拍扁”得到一个大的单词集合。
然后,针对这个大的单词集合,执行map()操作,也就是map(lambda word : (word, 1)),这个map操作会遍历这个集合中的每个单词,当遍历到其中一个单词时,就把当前这个单词赋值给变量word,并执行Lamda表达式word : (word, 1),这个Lamda表达式的含义是,word作为函数的输入参数,然后,执行函数处理逻辑,这里会执行(word, 1),也就是针对输入的word,构建得到一个tuple,形式为(word,1),key是word,value是1(表示该单词出现1次)。
程序执行到这里,已经得到一个RDD,这个RDD的每个元素是(key,value)形式的tuple。最后,针对这个RDD,执行reduceByKey(labmda a, b : a + b)操作,这个操作会把所有RDD元素按照key进行分组,然后使用给定的函数(这里就是Lamda表达式:a, b : a + b),对具有相同的key的多个value进行reduce操作,返回reduce后的(key,value),比如(“hadoop”,1)和(“hadoop”,1),具有相同的key,进行reduce以后就得到(“hadoop”,2),这样就计算得到了这个单词的词频。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。