Pyspark学习笔记1——配置环境并计算pi测试
Pyspark学习笔记(一)
环境搭建
在linux的CentOS 7.3中,首先要配置好JDK和python。
1.JDK和Python3配置
Jdk的下载地址,注意需要先点击同意条款的按钮。http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
$ wget https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz #下载jdk包
$ tar -zxvf jdk-8u191-linux-x64.tar.gz #解压
$ mv jdk-8u191-linux-x64 /usr #将解压好的文件移动到usr文件夹里面
$ mv jdk-8u191-linux-x64 jdk #名字太长,改个名字为jdk
$ sudo vi /etc/profile #配置环境变量。sudo是管理员命令,如果上面的步骤进行不下去,也在前面加上sudo
输入 i 进行编辑,看到最下面变为edit。在最后写入以下内容:
#Java Env
export JAVAHOME=/usr/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
按esc退出编辑模式,再输入":wq"保存并退出编辑器
$ source /etc/profile #使环境变量生效
$ java -version #查看是否安装成功
参考文章:
(jdk安装过程)https://www.cnblogs.com/liugh/p/6623530.html
(jdk安装包报错)https://blog.csdn.net/jdjdndhj/article/details/73649419
之后安装python3
#安装依赖环境
$ yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
#下载Python3
$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
#解压并移动至新的文件夹
$ tar -zxvf Python-3.6.1.tgz
$ mv Python-3.6.1 /usr
#进入文件夹,编译安装
$ cd /usr/Python-3.6.1
$ mkdir -p /usr/local/python3
$ ./configure --prefix=/usr/local/python3
$ make
$ make install
#设置软链
$ ln -s /usr/local/python3/bin/python3 /usr/bin/python3
#配置环境变量
$ vim etc/.bash_profile
同样输入i打开编辑模式,加入以下内容:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/python3/bin
export PATH
按ESC,输入":wq"保存并退出。
$ source ~/.bash_profile
#查看是否安装成功python3和pip
$ python3 -version>>exit()
$ pip3 install numpy
如果产生报错,很有可能是依赖没有安装好,重新回上面yum安装。当报错error while loading shared libraries时,可参考下面第二篇文章。
参考文章:
https://www.cnblogs.com/kimyeee/p/7250560.html
https://blog.csdn.net/learner198461/article/details/54598895
2. 安装Pyspark
$ wget https://www-eu.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
$ tar -xzf spark-2.4.0-bin-hadoop2.7.tgz
$ mv spark-2.4.0-bin-hadoop2.7 /usr
$ cd /usr
$ mv spark-2.4.0-bin-hadoop2.7 spark2.4.0
$ vi /etc/profile
#添加内容
export SPARK_HOME=/usr/spark #设置SPARK_HOME环境变量
export PATH=$SPARK_HOME/bin:$PATH # 将Spark添加到PATH中
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH #添加到Python路径
esc +:wq保存退出
$ source /etc/profile
$ pip install py4j
#测试是否安装完成
$ pyspark
##测试
>>
from pyspark import SparkContext
sc = SparkContext( 'local', 'pyspark')
def isprime(n):"""check if integer n is a prime"""# make sure n is a positive integern = abs(int(n))# 0 and 1 are not primesif n < 2:return False# 2 is the only even prime numberif n == 2:return True# all other even numbers are not primesif not n & 1:return False# range starts with 3 and only needs to go up the square root of n# for all odd numbersfor x in range(3, int(n**0.5)+1, 2):if n % x == 0:return Falsereturn True# Create an RDD of numbers from 0 to 1,000,000
nums = sc.parallelize(xrange(1000000))# Compute the number of primes in the RDD
print nums.filter(isprime).count()
参考原文:
https://blog.csdn.net/github_33934628/article/details/70189141
https://blog.csdn.net/weixin_39599711/article/details/79003192
https://blog.csdn.net/sinat_26599509/article/details/51204121
3.配置HDFS和Hadoop
参考文章:https://www.cnblogs.com/shely-Wangfan/p/6129399.html
下载hadoop的链接:https://archive.apache.org/dist/hadoop/common/
其中遇到很多问题。首先是
$ vi /etc/hosts
以及
$ vi /etc/hostname
要相同,而且配置好之后
$ reboot
进行重启生效。
在配置环境变量里面
$ vi /etc/profile
i
export HADOOP_HOME=/usr/hadoop-3.1.1
export PATH=$HADOOP_HOME/bin:$PATH
esc,:wq
$ source /etc/profile
在中间需要修改xml的时候,注意把所有内容放在configuration里面。
<configuration>
....
</configuration>
在最后启动时,start-all.sh文件可能在/bin里面,也可能在/sbin里面。当报错说command:start-all.sh not found的时候,输入的命令改为:
$ ./start-all.sh
最后输入
$ jps
启动成功
使用Pyspark计算pi
代码
from pyspark import SparkContext
#莱布尼兹方法
sc = SparkContext("local", "Pi Leibniz approximation")
iteration = 10000 #预置迭代次数,可变
partition = 4 #划分到四个服务器上进行运行
data = range(0,iteration)
distIn = sc.parallelize(data,partition)
result = distIn.map(lambda n:(1 if n%2==0 else -1)/float(2*n+1)).reduce(lambda a,b: a+b)
print("Pi is %f" % (result*4))#概率计算方法
from __future__ import print_functionimport sys
from random import random
from operator import addfrom pyspark.sql import SparkSessionif __name__ == "__main__":"""Usage: pi [partitions]"""spark = SparkSession\.builder\.appName("PythonPi")\.getOrCreate()partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2n = 100000 * partitionsdef f(_):x = random() * 2 - 1y = random() * 2 - 1return 1 if x ** 2 + y ** 2 <= 1 else 0count = spark.sparkContext.parallelize(range(1, n + 1), partitions).map(f).reduce(add)print("Pi is roughly %f" % (4.0 * count / n))spark.stop()
代码保存为 pi.py,之后运行:
$ python pi.py
来源1:https://sysadminci.wordpress.com/2016/02/16/apache-spark-distributed-computation-of-pi-in-8-lines-of-python-code/
来源2:https://github.com/apache/spark/blob/master/examples/src/main/python/pi.py
求pi的方法
1. 莱布尼兹
德国数学家莱布尼茨Leibniz在研究圆周率π的过程中发现一个数学定理是这样的:
π/4=1−1/3+1/5−1/7+...\pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...π/4=1−1/3+1/5−1/7+...
迭代10000次之后,其结果达到了小数点后的第三位。
如果把迭代次数设置为计算机能承受的最大值,得到的结果:
尽管计算较费时间,但每一次迭代的结果都会更接近 Pi 的精确值,迭代 500,000 次后可准确计算出 Pi 的 10 位小数。
2.概率计算法
计算随机选择XY为-1到1的点落在半径为1的圆内的概率:
在一个边长为2的正方形内画个圆,正方形的面积
S1=4S1=4S1=4,圆的半径 r=1r=1r=1,面积 S2=πr2=πS2=πr^2=πS2=πr2=π现在只需要计算出S2就可以知道π。
取圆心为坐标轴原点,在正方形中不断的随机选点,总共选n个点,计算在圆内的点的数目为count,则 S2=S1∗count/nS2=S1*count/nS2=S1∗count/n.
来源:https://blog.csdn.net/wuxintdrh/article/details/80401271
MapReduce运行过程
i)预置迭代次数
ii)使用map函数来对每一个n取值
iii)使用reduce将每一个数加起来
来源:https://ouds.org.uk/use-case/
Pyspark学习笔记1——配置环境并计算pi测试相关推荐
- ESP32_WIFI Mesh学习笔记1---Ardino IDE 环境配置
ESP_WIFI MESH学习笔记1-Ardino IDE 环境配置 文章目录 ESP_WIFI MESH学习笔记1---Ardino IDE 环境配置 前言 一.Arduino IDE配置问题 二. ...
- oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组
ASM学习笔记_配置ASMLIB磁盘组 目录 1 ASMLIB Introduction 2 虚拟机添加一个共享磁盘(块设备) 3 下载,安装ASMLIB 4 配置,使用ASMLib 磁盘组 #### ...
- Ionic 学习笔记之-痛彻心扉的环境搭建
Ionic 学习笔记之-痛彻心扉的环境搭建 最近在学习Ionic 做多平台的应用.跨平台应用.就是用html写的界面.js实现逻辑. 在学ionic之前选了各种跨平台APP开发框架.最后选择了ioni ...
- Spark学习笔记[1]-scala环境安装与基本语法
Spark学习笔记[1]-scala环境安装与基本语法 正所谓工欲善其事必先利其器,Spark的开发语言不是java而是scala,虽然都是运行于JVM,但是两门语言的基本特性还是有些不一样,这里 ...
- ITK学习笔记(五) ITK计算质心
ITK学习笔记(五) ITK计算质心 通过LabelGeometryImageFilter可以求Label Image各个区域的质心和BoundingBox.然而,如果图像的spacing不是1,它并 ...
- Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从
Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...
- 算法学习笔记:对指定金额计算最少钞票数
算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...
- 算法【二叉树】学习笔记 - 已知结点数计算可构建出多少种二叉树
算法[二叉树]学习笔记 - 已知结点数计算可构建出多少种二叉树 卡特兰数 相关知识点 排列组合公式 排列 Arrangement 组合 Combination 分步计算 简化 参考资料 题目:已知3个 ...
- OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7866 ...
最新文章
- 操作主机 RID matser[为企业维护windows server 2008系列七]
- 因脉脉上的匿名消息,拼多多员工被开除了!
- excel公式 某一个单元格等于另一个单元格的值_EXCEL函数学习5——COUNTIF函数
- linux篇:查看Linux版本号
- 数组以及对象遍历方法对比
- Java内置数据类型
- Python 小白从零开始 PyQt5 项目实战(5)布局管理
- 论富客户端程序的webservice实现
- HDU2027 统计元音【入门】
- vue-cli工具搭建vue-webpack项目
- 前端笔记之Vue(五)TodoList实战拆分store跨域练习代理跨域
- 如何在 Excel 中计算 NPS
- 【风险管理】信贷生命周期之风险管理
- 魅族u20怎么刷Android,魅族魅蓝U20/U10一键Root权限获取+USB驱动安装
- 云真机可以帮助测试解决什么问题?
- Linux安装Tab键补全功能
- MATLAB车牌识别原理[大白话]
- Apache FTPServer本地部署FTP服务
- stm32零基础怎么两周入门,应该怎么安排?
- 大数据正在改变我们的生活