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测试相关推荐

  1. ESP32_WIFI Mesh学习笔记1---Ardino IDE 环境配置

    ESP_WIFI MESH学习笔记1-Ardino IDE 环境配置 文章目录 ESP_WIFI MESH学习笔记1---Ardino IDE 环境配置 前言 一.Arduino IDE配置问题 二. ...

  2. oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组

    ASM学习笔记_配置ASMLIB磁盘组 目录 1 ASMLIB Introduction 2 虚拟机添加一个共享磁盘(块设备) 3 下载,安装ASMLIB 4 配置,使用ASMLib 磁盘组 #### ...

  3. Ionic 学习笔记之-痛彻心扉的环境搭建

    Ionic 学习笔记之-痛彻心扉的环境搭建 最近在学习Ionic 做多平台的应用.跨平台应用.就是用html写的界面.js实现逻辑. 在学ionic之前选了各种跨平台APP开发框架.最后选择了ioni ...

  4. Spark学习笔记[1]-scala环境安装与基本语法

    Spark学习笔记[1]-scala环境安装与基本语法   正所谓工欲善其事必先利其器,Spark的开发语言不是java而是scala,虽然都是运行于JVM,但是两门语言的基本特性还是有些不一样,这里 ...

  5. ITK学习笔记(五) ITK计算质心

    ITK学习笔记(五) ITK计算质心 通过LabelGeometryImageFilter可以求Label Image各个区域的质心和BoundingBox.然而,如果图像的spacing不是1,它并 ...

  6. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从

    Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...

  7. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

  8. 算法【二叉树】学习笔记 - 已知结点数计算可构建出多少种二叉树

    算法[二叉树]学习笔记 - 已知结点数计算可构建出多少种二叉树 卡特兰数 相关知识点 排列组合公式 排列 Arrangement 组合 Combination 分步计算 简化 参考资料 题目:已知3个 ...

  9. OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7866 ...

最新文章

  1. 操作主机 RID matser[为企业维护windows server 2008系列七]
  2. 因脉脉上的匿名消息,拼多多员工被开除了!
  3. excel公式 某一个单元格等于另一个单元格的值_EXCEL函数学习5——COUNTIF函数
  4. linux篇:查看Linux版本号
  5. 数组以及对象遍历方法对比
  6. Java内置数据类型
  7. Python 小白从零开始 PyQt5 项目实战(5)布局管理
  8. 论富客户端程序的webservice实现
  9. HDU2027 统计元音【入门】
  10. vue-cli工具搭建vue-webpack项目
  11. 前端笔记之Vue(五)TodoList实战拆分store跨域练习代理跨域
  12. 如何在 Excel 中计算 NPS
  13. 【风险管理】信贷生命周期之风险管理
  14. 魅族u20怎么刷Android,魅族魅蓝U20/U10一键Root权限获取+USB驱动安装
  15. 云真机可以帮助测试解决什么问题?
  16. Linux安装Tab键补全功能
  17. MATLAB车牌识别原理[大白话]
  18. Apache FTPServer本地部署FTP服务
  19. stm32零基础怎么两周入门,应该怎么安排?
  20. 大数据正在改变我们的生活

热门文章

  1. 真相了,读完研就能找到好工作吗?
  2. 小狐狸横版游戏开发学习笔记(上)
  3. 【Springboot】集成百度地图实现定位打卡功能
  4. C++模板元编程(0)什么是模板元编程,模板元编程的使命
  5. 互联网金融风控系统的设计
  6. 安卓之设计模式七大原则
  7. zan php demo,zan框架的连接池实现
  8. 【uni-app】picker普通选择器的用法
  9. [渝粤教育] 江西财经大学 大学体育与健康生活 参考 资料
  10. iphone编辑过的录音怎么还原_iphone如何恢复误删录音?