python从0编写spark程序

1 篇文章 0 订阅
1 篇文章 0 订阅
本文介绍了如何从零开始搭建Spark环境,包括在Master和Slave节点的启动。接着讲解了Spark中的RDD和DataFrame的区别,指出DataFrame在Spark3.0后成为官方推荐,因其提供了更高级别的抽象和更低的数据操作耦合度。通过Python的PySpark,演示了如何读取数据、处理特征并用随机森林进行训练。最后展示了PySpark实现随机森林的代码示例。
摘要由CSDN通过智能技术生成

导读:从0开始搭建spark环境,了解spark里的RDD和DataFrame,并用python编写spark程序,实现分布式数据读取,ML训练。

一、从0搭建spark

  1. 从官网下载spark包,并解压到自定义目录,配置环境变量。
  2. mater启动:进入到spark解压目录,输入命令:./sbin/start-master.sh -h master_ip
  3. slave启动:./sbin/start-slave.sh spark://master_ip:7077

二、RDD和DataFrame

了解RDD和DataFrame关系时,不放从Spark的两个机器学习的库ML和MLlib来接入原文链接

  1. 目前常用的机器学习功能2个库都能满足需求;
  2. spark官方推荐使用ML, 因为在spark3.0之后,将会废弃MLlib,全面的基于ML。因为ml操作的对象是DataFrame,操作起来会比RDD方便很多。所以,建议新接触spark的同学可以直接用ml 的方式;
  3. ML主要操作的是DataFrame, 而MLlib操作的是RDD,也就是说二者面向的数据集不一样。相比于MLlib在RDD提供的基础操作,ML在DataFrame上的抽象级别更高,数据和操作耦合度更低;
  4. DataFrame和RDD什么关系?DataFrame是Dataset的子集,也就是Dataset[Row], 而DataSet是对RDD的封装,对SQL之类的操作做了很多优化;
  5. 相比于MLlib在RDD提供的基础操作,ML在DataFrame上的抽象级别更高,数据和操作耦合度更低;
  6. ML中的操作可以使用pipeline, 跟sklearn一样,可以把很多操作(算法/特征提取/特征转换)以管道的形式串起来,然后让数据在这个管道中流动。大家可以脑补一下Linux管道在做任务组合时有多么方便;
  7. ML中无论是什么模型,都提供了统一的算法操作接口,比如模型训练都是fit;不像MLlib中不同模型会有各种各样的train;
  8. MLlib在spark2.0之后进入维护状态, 这个状态通常只修复BUG不增加新功能;
  9. ML中的随机森林支持更多的功能:包括重要度、预测概率输出等,而MLlib不支持。

三、python操作spark

1、 什么是PySpark

Apache Spark是用Scala编程语言编写的。为了用Spark支持Python,Apache Spark社区发布了一个工具PySpark。使用PySpark,您也可以使用Python编程语言处理RDD。正是由于一个名为Py4j的库,他们才能实现这一目标。

2 、PySpark实现随机森林
# -*- coding:utf-8 -*-


from pyspark import SparkConf
from pyspark.sql import SparkSession
import os
from pyspark.ml.feature import StringIndexer, VectorAssembler
from pyspark.ml.classification import RandomForestClassifier

os.environ["PYSPARK_PYTHON"]="/usr/bin/python3"


# 设置master地址,worker使用的内存及cpu
appname = "test1"
master = "spark://192.168.255.168:7077"
conf = SparkConf().setAppName(appname).setMaster(master)  # spark资源配置
conf.set('spark.driver.maxResultSize', '182g')
conf.set('spark.executor.memory', '60g')
conf.set('spark.cores.max', 30)
conf.set("spark.executor.cores", '8')

#SparkSession为用户提供了统一的切入点,来让用户学习spark的各项功能。
spark = SparkSession.builder.config(conf=conf).getOrCreate()

#SparkContext是spark的主要切入点,由于RDD是主要的API,我们通过sparkcontext来创建和操作RDD。
sc = spark.sparkContext

# 对于每个其他的API,我们需要使用不同的context,例如,例如:Streming
# ssc = StreamingContext(sc, 1)


# 将csv文件读入rdd,并转成spark中的dataframe
file = "/Ipynb/Gum/loop/demo20191204_1.csv"
lines = sc.textFile(file)
df0=spark.read.csv(lines, header=True, encoding="utf-8",maxColumns=50000,inferSchema=True)
print("读取完成")

# 处理特征,第一列为target,第二列及后面数据为feature
old_columns_names = df0.columns
df0 = df0.withColumnRenamed(old_columns_names[0], 'label')
vecAss = VectorAssembler(inputCols=old_columns_names[1:],handleInvalid="keep", outputCol='features')
df0 = vecAss.transform(df0)
dfi = df0.select(['label', 'features'])
print(dfi.show(3))

# 进行随机森林训练
blor = RandomForestClassifier(numTrees=3, maxDepth=2, featuresCol="features", labelCol="label", seed=42)
blorModel = blor.fit(dfi)
print("训练完成")
result = blorModel.transform(dfi)
result.filter(result.label == result.prediction).count()/result.count()
sc.stop()
print(result.show(3))
  1. ui界面

输入以下命令,开始运行:

spark-submit demo.py

查看ui界面,可以发现两个worker,同时运行,cpu核和内存是对应的,在代码中可以配置。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值