PyCharm搭建Spark开发环境实现第一个pyspark程序


Posted in Python onJune 13, 2019

一, PyCharm搭建Spark开发环境

Windows7, Java1.8.0_74, Scala 2.12.6, Spark 2.2.1, Hadoop2.7.6

通常情况下,Spark开发是基于Linux集群的,但这里作为初学者并且囊中羞涩,还是在windows环境下先学习吧。

参照这个配置本地的Spark环境。

之后就是配置PyCharm用来开发Spark。本人在这里浪费了不少时间,因为百度出来的无非就以下两种方式:

1.在程序中设置环境变量

import os
import sys

os.environ['SPARK_HOME'] = 'C:\xxx\spark-2.2.1-bin-hadoop2.7'
sys.path.append('C:\xxx\spark-2.2.1-bin-hadoop2.7\python')

2.在Edit Configuration中添加环境变量

PyCharm搭建Spark开发环境实现第一个pyspark程序

PyCharm搭建Spark开发环境实现第一个pyspark程序

不过还是没有解决程序中代码自动补全。

想了半天,观察到spark提供的pyspark很像单独的安装包,应该可以考虑将pyspark包放到python的安装目录下,这样也就自动添加到之前所设置的pythonpath里了,应该就能实现pyspark的代码补全提示。

将spark下的pyspark包放到python路径下(注意,不是spark下的python!)

PyCharm搭建Spark开发环境实现第一个pyspark程序

PyCharm搭建Spark开发环境实现第一个pyspark程序

最后,实现了pyspark代码补全功能。

PyCharm搭建Spark开发环境实现第一个pyspark程序

二.第一个pyspark程序

作为小白,只能先简单用下python+pyspark了。

数据:Air Quality in Madrid (2001-2018)

需求:根据历史数据统计出每个月平均指标值

import os
import re
from pyspark.sql import SparkSession

if __name__ == "__main__":

 spark = SparkSession.builder.getOrCreate()
 df_array = []
 years = []
 air_quality_data_folder = "C:/xxx/spark/air-quality-madrid/csvs_per_year"
 for file in os.listdir(air_quality_data_folder):
  if '2018' not in file:
   year = re.findall("\d{4}", file)
   years.append(year[0])
   file_path = os.path.join(air_quality_data_folder, file)
   df = spark.read.csv(file_path, header="true")
   # print(df.columns)
   df1 = df.withColumn('yyyymm', df['date'].substr(0, 7))
   df_final = df1.filter(df1['yyyymm'].substr(0, 4) == year[0]).groupBy(df1['yyyymm']).agg({'PM10': 'avg'})
   df_array.append(df_final)

 pm10_months = [0] * 12
 # print(range(12))
 for df in df_array:
  for i in range(12):
   rows = df.filter(df['yyyymm'].contains('-'+str(i+1).zfill(2))).first()
   # print(rows[1])
   pm10_months[i] += (rows[1]/12)

 years.sort()
 print(years[0] + ' - ' + years[len(years)-1] + '年,每月平均PM10统计')
 m_index = 1
 for data in pm10_months:
  print(str(m_index).zfill(2) + '月份: ' + '||' * round(data))
  m_index += 1

运行结果:

- 2017年,每月平均PM10统计
01月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
02月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
03月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
04月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
05月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
06月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
07月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
08月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
09月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12月份: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

由以上统计结果,可以看出4月份的PM10最低。

Done!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Django中进行用户注册和邮箱验证的方法
May 09 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
详解django的serializer序列化model几种方法
Oct 16 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
pandas的排序和排名的具体使用
Jul 31 Python
python的faker库用法
Nov 28 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
使用tensorflow进行音乐类型的分类
Aug 14 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 Python
Pycharm如何打断点的方法步骤
Jun 13 #Python
用pycharm开发django项目示例代码
Jun 13 #Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 #Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 #Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 #Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 #Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 #Python
You might like
PHP 选项及相关信息函数库
2006/12/04 PHP
php的一个登录的类 [推荐]
2007/03/16 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
JavaScript运算符小结
2015/06/03 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
Python SQL查询并生成json文件操作示例
2018/08/17 Python
python实现淘宝秒杀脚本
2020/06/23 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
工程采购员岗位职责
2014/03/09 职场文书
医学专业自荐信
2014/06/14 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
辞职信如何写
2015/02/27 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
Redis全局ID生成器的实现
2022/06/05 Redis