欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Pyspark学习笔记1——配置环境并计算pi测试

发布时间:2023/12/20 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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=11/3+1/51/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=S1count/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测试的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。