一、PySpark简介
PySpark 是 Spark 为 Python 开发者提供的 API ,位于 $SPARK_HOME/bin 目录,其依赖于 Py4J。
Spark2.0之后的初始化,会在spark安装pyspark的模块,直接在spark/bin/启动pyspark是会报错的:
原因是因为spark2.0默认安装的Python是3.6的,而“Spark <= 2.1.0 is not compatible with Python 3.6”,需要安装Python3.5,如果是anaconda,直接把版本切换到3.5就行了:
conda create -n py35 python=3.5
然后在启动pyspark的时候,先启动3.5版本的Python虚拟环境,然后再运行pyspark,就能初始化pyspark了
source activate py35
pyspark
二、PySpark操作DataFrame
具体操作例子可以见官方的例子,python操作sparksql,还有详细API可以参见pyspark.sql
比如从MySQL数据库中读取数据,生成DataFrame:
url = "jdbc:mysql://127.0.0.1:3306/databaseName?useSSL=false"
driver = "com.mysql.jdbc.Driver"
df = spark.read \
.format("jdbc") \
.option("url", url).option("driver", driver).option("user", user).option("password",password) \
.option("dbtable", "schema.table_name") \
.load()
df.printSchema()
df.show()
三、PySpark脚本运行
对于不是从spark/bin/pyspark启动的环境,需要在Python脚本中增加
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("PySparkAppName") \
.getOrCreate()
在shell中执行时可以这样写,这样就可以将python写的spark程序提交到yarn中:
sudo -u hdfs bin/spark-submit --master yarn-client --jars $SPARK_HOME/jars/mysql-connector-java-5.1.44.jar /tmp/脚本名称.py
注:由于作者的环境是CDH,权限分明,执行spark时需要将用户切换到hdfs才能操作HDFS上的文件,同时例子有用到mysql,需要增加mysql的依赖包,其他类似。