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/hostname要相同,而且配置好之后
$ reboot進行重啟生效。
在配置環境變量里面
i
export HADOOP_HOME=/usr/hadoop-3.1.1 export PATH=$HADOOP_HOME/bin:$PATHesc,: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测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 橘子学设计模式之原型模式
- 下一篇: 并发编程 - lost wakeup