本文档介绍了如何配置虚拟机spark python开发环境,以及简要的开发指南。
环境配置
环境配置请参考文档:虚拟机配置Jupyter+Pyspark
交互式界面
Spark为我们提供了一个交互式界面运行我们的代码,在命令行下运行pyspark
$ pyspark
在交互式界面下,pyspark会自动帮我们创建SparkContext sc,和HiveContext作为sqlContext直接使用。sc可以用来读取HDFS上的文件,sqlContext可以访问我们的Hive数据库。
#读取文件sc.textFile("/path/to/file").first()
#读取数据库sqlContext.sql("select count(1) from tmp.your_table").show()
应用开发
spark也支持提交一个py文件运行,以下是一个spark python应用基本结构
"""SimpleApp.py"""
from pyspark import SparkContext
#if you need access hive
from pyspark import HiveContext
sc = SparkContext("YourAppName")
#if you need access hivesqlContext = HiveContext(sc)
#your code here
sc.stop()
运行我们开发的py文件
spark-submit yourappname.py
引用第三方依赖
Spark允许我们在运行时添加我们需要的第三方依赖
#在创建sc时添加
sc = SparkContext(pyFiles=["xx1.py","xx2.py"])
#在运行时新增
sc.addPyFile("jieba.zip")
一个完整的示例
如下是一个完整的示例,展示了如果通过Hive读取数据,加载第三方依赖jieba分词,然后使用ml包提供的kmeans方法对句子做了一个分类。
我们在集群上有如下表。
select * from tmp.pyspark_cluster_example order by id
+----+--------------------+
| id | sentence |
+----+--------------------+
| 1 | 小许喜欢胸大的妹子 |
| 2 | 小陈喜欢可爱的妹子 |
| 3 | 我喜欢腿长的妹子 |
+----+--------------------+
完整代码如下
# -*- coding: utf-8 -*-
from pyspark import SparkContext
from pyspark import HiveContext
from pyspark.ml.feature import Word2Vec
from pyspark.ml.clustering import KMeans
#创建sc的同时声明第三方依赖jieba.zip。
sc = SparkContext(appName="example", pyFiles=["jieba.zip"])
sqlContext = HiveContext(sc)
#导入jieba分词
import jieba
#从Hive表读取数据
df = sqlContext.sql("select * from tmp.pyspark_cluster_example order by id")
#使用结巴分词对句子进行分词
wordsDf = df.map(lambda r:[r.id, r.sentence,jieba.lcut(r.sentence)]).toDF(["id","sentence", "words"])
#使用Word2Vec把文本变成向量
word2Vec = Word2Vec(minCount=0, inputCol="words", outputCol="features")
model = word2Vec.fit(wordsDf)
featureDf = model.transform(wordsDf)
#分类kmeans = KMeans(k=2)
model = kmeans.fit(featureDf)
resultDf = model.transform(featureDf).select("id", "sentence", "prediction")
centers = model.clusterCenters()
print(len(centers))
#查看结果
for r in resultDf.select("*",).take(6):
print(r.sentence.encode("utf-8"))
print(r.prediction)
通过如下代码提交运行
spark-submit --master=local cluster.py
运行结果如下
小许喜欢胸大的妹子1小陈喜欢可爱的妹子1我喜欢腿长的妹子1红烧肥肠好好吃0红烧排骨好好吃0糖醋排骨好好吃0
参考文档
https://spark.apache.org/docs/1.6.0/api/python/index.html
https://spark.apache.org/docs/1.6.0/ml-features.html