Pysprak

local[N]代表在本地终端运行, 同时使用N个线程, N尽量使用机器CPU核心数量

pyspark --master local[N]

Pyspark方法

方法说明
sc.master查看运行模式
sc.textFile(‘file:/usr/readme.txt’)读取本地文件, 路径加file, 告诉系统要读取HDFS文件
sc.textFile.count()显示行数
sc.textFile(‘hdfs://naster:9000/a/LICENSE.txt’)读取HDFS文件, 路径加hdfs://naster:9000
************************************************************************************************************************************
sc.parallelize(List(3, 1, 2, 2, 5))创建intRDD, 转换运算
intRDD.collect()转换为List, 动作运算
intRDD.map(函数)映射, 转换运算
strRDD.filter(函数)过滤映射, 转换运算
intRDD.distinct()去重 + 排序
strRDD.randomSplit([0.4, 0.6])以随机数的方式按照4:6分成两个RDD
intRDD.groupBy(函数)转换运算, 需要sorted 动作运算
intRDD1.union(intRDD2).collect()并集运算, 类似python list的extend方法
intRDD1.intersection(intRDD2).collect()交集运算, 类似python set的&
intRDD1.subtract(intRDD2).collect()差集运算, 类似python set的-
intRDD1.cartesian(intRDD2).collect()笛卡尔乘积, 数组每个元素和另外一个数组中元素extend
intRDD.first()动作运算,取出第一项元素
intRDD1.take(4)动作运算, 取出前四项元素
intRDD1.takeOrdered(3)动作运算, 从小到大排序, 取出前三个
intRDD1.takeOrdered(3, lambda x: -x)动作运算, 从大到小排序, 取出前三个
intRDD1.stats()统计
intRDD1.min()最小
intRDD1.max()最大
intRDD1.stdev()标准差
intRDD1.count()计数
intRDD1.sum()总和
intRDD1.mean()平均
RDD.zipWithIndex()将字符串进行编号
************************************************************************************************************************************
Key-Value基本转换运算kvRDD1 = sc.parallelize([[1,2], [3,4]]) 每个数组中第一个元素是key
kvRDD1.keys().collect()列出全部key值
kvRDD1.values().collect()列出全部values值
kvRDD1.filter(lambda x: x[0] < 5)筛选, 筛选出key < 5
kvRDD1.mapValues(lambda x: x * x).collect()每个values做平方运算
kvRDD1.sortByKey(ascending=True).collect()按照key值从小到大排序, 默认是True
kvRDD1.reduceByKey(lambda x,y:x+y).collect()MapReduce运算
kvRDD1.join(kvRDD2).collect()join运算, 将两个RDD按照相同的key值join起来
kvRDD1.leftjoin(kvRDD2).collect()join运算, 将两个RDD按照相同的key值join起来, 匹配不上, 置为None
kvRDD1.rightOuterJoin(kvRDD2).collect()join运算, 将两个RDD按照相同的key值join起来, 与leftjoin相反
kvRDD1.subtractByKey(kvRDD2).collect()删除相同key值的数据
kvrdd1.countByKey()计算RDD中每一个Key的数量
kvrdd1.collectAsMap()根据key-value创建字典, value取key的数量最大值
kvrdd1.lookup(num)根据key查找对应的value
************************************************************************************************************************************
sc.broadcast(转换之后的字典)创建广播变量, 创建后不能被修改
RDD.map(lambda x: 广播变量.value[x]).collect类似map映射, 但会存储在内存中, 可节省内存和时间
sc.accumulator(初始值(double或int类型))创建累加器,使用.add自增, 在foreach中不能读取累加器的值, 循环外可以使用
************************************************************************************************************************************
RDD.persist(存储等级)指定存储等级, 默认MEMORY_ONLY存储在内存中
RDD.unpersist()取消持久化
RDD.is_cached是否持久化

在Hadoop YARN上运行pyspark

HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop pyspark --master yarn --deploy-mode client

构建Spark独立集群运行环境

  1. 复制模板文件来创建spark-env.sh
    1. cp /usr/local/spark/conf/spark-env.sh.template /usr/local/spark/conf/spark-env.sh
  2. 设置spark-env.sh
    1. sudo vim /usr/local/spark/conf/spark-env.sh
    2. 添加下面
export SPARK_MASTER_IP=master
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=512m
export SPARK_WORKER_INSTANCES=4

连接至data1, data2, data3

  1. ssh data1, ssh data2, ssh data3
  2. 创建spark目录
    1. sudo mkdir /usr/local/spark
  3. 更改所有者为hduser
    1. sudo chown hduser:hduser /usr/local/spark
  4. 注销exit
  5. 使用scp将master的spark程序复制到data1, data2, data3
    1. data1 sudo scp -r /usr/local/spark hduser@data1:/usr/local
    2. data2 sudo scp -r /usr/local/spark hduser@data2:/usr/local
    3. data3 sudo scp -r /usr/local/spark hduser@data3:/usr/local

编辑slaves文件

  1. Spark独立集群都有哪些服务器
    1. sudo vim /usr/local/spark/conf/slaves
    2. 填写下面信息
data1
data2
data3

在Spark独立集群上运行pyspark

  1. 启动Spark独立集群 /usr/local/spark/sbin/start-all.sh
    1. 也可分别运行
      1. /usr/local/spark/sbin/start-master.sh
      2. /usr/local/spark/sbin/start-slaves.sh
    2. 结束/usr/local/spark/sbin/stop-all.sh
  2. 在Spark独立集群运行pyspark程序
    1. pyspark --master spark://master:7077 --num-executors 1 --total-executor-cores 3 --executor-memory 512m

在data1, data2,data3安装Anconda

在Ipython中运行Python Spark程序

  1. 下载Anaconda2
  2. 安装Anaconda2bash Anaconda2-5.3.1-Linux-x86_64.sh -b
  3. 添加环境变量
    1. sudo vim ~/.bashrc
    2. 添加下面的东西
export PATH=/home/hduser/anaconda2/bin:$PATH

export ANACONDA_PATH=/home/hduser/anaconda2
export PYSPARK_DRIVER_PYTHON=$ANACONDA_PATH/bin/ipython
export PYSPARK_PYTHON=$ANACONDA_PATH/bin/python
  1. 使环境变量生效source ~/.bashrc
  2. 查看环境变量是否生效python --version
  3. 创建Ipython Spark工作目录mkdir -p ~/pythonwork/ipythonbook cd ~/pythonwork/ipythonbook
  4. PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook" pyspark --master local[*]
  5. 远程访问jupyter
    1. 275行 263行 256行 200行

在ipython中使用yarn模式运行

  1. 切换目录cd ~/pythonbook/ipythonbook
  2. PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook" HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop MASTER=yarn-client pyspark
  3. 书上的命令不太一样

在ipython中使用Spark独立集群模式运行

  1. 启动独立集群/usr/local/spark/sbin/start-all.sh
  2. 切换目录cd ~/pythonbook/ipythonbook
  3. PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook" HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop MASTER=spark://master:7077 pyspark --num-executors 1 --total-executor-cores 2 --executor-memory 512m

Pysprak机器学习算法

协同过滤式推荐算法
优点缺点
可以达到个性化推荐冷启动问题(没有历史数据就无法分析)
不需要内容分析新用户问题: 新用户没有评分, 就不知道他的喜好
可以发现用户新的兴趣点
自动化程度高
from pyspark.mllib.recommendation import ALS	# 协同过滤式算法
from pyspark.mllib.recommendation import Rating	# 貌似没用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葬爱程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值