Spark学习—— (4) 基本使用(Python)

Spark支持Java、Python、Scala、R语法,可以通过spark-shell(Scala)或pyspark(Python)进行交互式的操作,也可以用spark-submit提交用Java、Python、Scala编写的应用。

为了学习Spark的使用,本文不涉及原理,仅仅介绍Spark中Python的基本使用,为之后学习Spark的使用打下基础。

本文使用部分全部来自官方参考文档Quick Start。

文章目录

      • 1. 使用IPYTHON启动pyspark
      • 2. 使用pyspark
        • 2.1 用DataSet代替RDD
        • 2.2 基本使用
      • 3. 编写python应用
      • Reference

1. 使用IPYTHON启动pyspark

  1. 安装IPYTHON,如下:
sudo apt install ipython3
sudo apt install ipython3-notebook
  1. 设置环境变量,Spark1.x和Spark2.x有区别,如下:
IPYTHON and IPYTHON_OPTS are removed in Spark 2.0+. 
Remove these and set PYSPARK_DRIVER_PYTHON and PYSPARK_DRIVER_PYTHON_OPTS instead.

spark-env.sh中添加内容如下:

#ipython for pyspark
export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
  1. 再次启动pyspark,如下:
Spark学习—— (4) 基本使用(Python)_第1张图片

2. 使用pyspark

2.1 用DataSet代替RDD

文档中有几句需要注意的话,如下:

Note that, before Spark 2.0, the main programming interface of Spark was the Resilient Distributed Dataset (RDD). After Spark 2.0, RDDs are replaced by Dataset, which is strongly-typed like an RDD, but with richer optimizations under the hood.

A Dataset is a distributed collection of data. Dataset is a new interface added in Spark 1.6 that provides the benefits of RDDs (strong typing, ability to use powerful lambda functions) with the benefits of Spark SQL’s optimized execution engine. Python does not have the support for the Dataset API.

A DataFrame is a Dataset organized into named columns. It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood.

  • 在Spark2.x中,RDD已经被DataSet取代
  • DataSet是一种新的数据集合,在RDD优点的基础上,增加了Spark SQL执行优化引擎的优点
  • DataFrame是按列组织的DataSetPython不支持DataSet但支持DataFrame
  • RDD的接口依然可以使用,但建议使用DataSet,因为效率更高

2.2 基本使用

  1. 创建一个README.md文件,写入一点东西,使用put命令把README.md上传到hdfs中
hdfs dfs -put README.md /spark/notebook
  1. 启动pyspark,local模式或者Standalone模式都可以
pyspark #本地模式
pyspark --master spark://master:7077 #Standalone模式
  1. 读入文件,可以看到textFile是上面说到的DataFrame,使用count计数、first查看第一行
Spark学习—— (4) 基本使用(Python)_第2张图片
  1. master:4040中可以看到Job的情况,如下:
Spark学习—— (4) 基本使用(Python)_第3张图片
  1. 使用filter函数,找到包含Spark的行
Spark学习—— (4) 基本使用(Python)_第4张图片
  1. 使用sql查询DtaFrame,如下:
  1. 拆开上述过程,如下:
Spark学习—— (4) 基本使用(Python)_第5张图片
  1. 用上述查询写wordCounts,如下:
Spark学习—— (4) 基本使用(Python)_第6张图片

3. 编写python应用

  1. 编写python应用,直接复制文档中的例子,如下:
"""countAB.py"""
from pyspark.sql import SparkSession

logFile = "spark/notebook/README.md"  # 注意文件地址
spark = SparkSession.builder.appName("SimpleApp").getOrCreate()
logData = spark.read.text(logFile).cache()

numAs = logData.filter(logData.value.contains('a')).count()
numBs = logData.filter(logData.value.contains('b')).count()

print("Lines with a: %i, lines with b: %i" % (numAs, numBs))

spark.stop()
  1. 本地提交测试,如下:
spark-submit --mater local[4] notebook/countAB.py
  1. Standalone提交测试,如下:
spark-submit --master spark://master:7077 notebook/countAB.py

以上即为spark中Python的基本使用,仅是为了之后的学习熟悉一下运行流程,打下基础。

Reference

  1. pyspark使用ipython
  2. Quick Start
  3. 《Spark快速大数据分析》

你可能感兴趣的:(大数据学习记录)