刚毕业那会,对大数据技术很感兴趣,那会也是该项技术被炒的热度很高的时候。但是出于各种各样的原因,对这方面的技术始终没有很好学习和应用。工作上多数情况下都还是单机训练模型,做特征工程。因此对这方面技术的学习逐渐疏忽。但是这严重的影响了一个算法工程师的处理数据能力的上限,因此,觉得这部分技术还是有必要加强一下。
关于Spark原理方面不做过多描述了,在单机环境下,采用pyspark库对spark提供API进行调用,我没有花时间去搭建集群,这部分比较消耗精力和时间,所以学习重点还是在pyspark所提供的算法API本身,事实上在真实场景下,从单机环境到集群环境的迁移,代码层面上并不需要太多改动,仅仅是参数的设置问题,故在单机环境下学习pyspark是没有问题的。
- 基础环境搭建
- 安装java,hadoop,spark,参考各个安装博客,问题不大。
- 配置好环境变量,JAVA_HOME, HADOOP_HOME, SPARK_HOME等。
- 在anconda环境下,pip install pyspark,即可使用python来操作Spark。
按照我以前的技术理念,Spark原生态支持scala,肯定想着花时间去学习一下这门语言,如今觉得,把时间消费在对某种编程语言的语法糖和语言特性上,不如将精力放在待解决问题本身上去更为重要。
- 测试环境
import os
import sys
spark_home = os.environ.get('SPARK_HOME', None)
if not spark_home:
raise ValueError('SPARK_HOME environment variable is not set')
sys.path.insert(0, os.path.join(spark_home, 'python'))
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.10.7-src.zip'))
comm=os.path.join(spark_home, 'python/lib/py4j-0.10.7-src.zip')
print ('start spark....',comm)
exec(open(os.path.join(spark_home, 'python/pyspark/shell.py')).read())
如图所示,单机环境搭建成功。启动http://localhost:4041 (默认),可开打spark的提供的监控界面,可监控执行任务。
- 简单实验
# 默认启动会创建sc对象,即SparkContext
rdd = sc.parallelize(range(10))
# 查看数据
rdd.collect()
# 求均值
rdd.mean()