spark教程(七)-文件读取案例
sparkSession 读取 csv
1. 利用 sparkSession 作为 spark 切入点
2. 读取 单个 csv 和 多个 csv
from pyspark.sql import SparkSession
from pyspark.sql import SQLContext if __name__ == '__main__':
scSpark = SparkSession \
.builder \
.appName("reading csv") \
.getOrCreate() # getOrCreate 获取现有 SparkSession 或者 新建一个 SparkSession print(scSpark.sparkContext) data_file = 'csvdata/*.csv' # 读取 csvdata 文件夹下所有 csv 文件,但是这些 csv 文件格式必须相同,也就是 列 相同
# data_file = 'xx.csv' # 读取单个 csv 文件
sdfData = scSpark.read.csv(data_file, header=True, sep=",").cache() # .cache 缓存返回data,从而提高性能
print('Total Records = {}'.format(sdfData.count()))
sdfData.show()
读取一个文件夹下多个 csv 时,务必保持 csv 格式相同,否则会警告,但不报错
19/10/15 02:29:32 WARN CSVDataSource: Number of column in CSV header is not equal to number of fields in the schema:
Header length: 2, schema size: 4 19/10/15 02:29:32 WARN CSVDataSource: CSV header does not conform to the schema.
各种模式读取文件
一个小项目:计算 GPS 频次
原数据长这样
1,108.99564,34.33999999,1
2,108.99564,34.3399087138298,1
3,108.99564,34.3398174376596,1
4,108.99564,34.3397261614894,1
5,108.99564,34.3396348853192,1
6,108.99564,34.3395436091489,1
7,108.99564,34.3394523329787,1
8,108.99564,34.3393610568085,1
Standalone 模式读取本地文件
在 local 模式下,文件无特殊要求
在 standalone 模式下读取本地文件,这个文件必须在每个节点上都存在,且路径一致
简易代码
from __future__ import division
from pyspark import SparkContext max_lng = 136
min_lng = 73
max_lat = 54
min_lat = 3
lng_stage = 1000
lat_stage = 1000 lng_step=(max_lng - min_lng) / (lng_stage)
lat_step=(max_lat - min_lat) / (lat_stage) def mymap(data):
# print(data, 1111111111111111111111111111111111)
return data.split(',') def mygroup(data):
# 对经纬度分区,打标签
# print(data[1], type(data[1]))
label_lng = round(float(data[1]) / lng_step, 1)
label_lat = round(float(data[2]) / lat_step, 1)
return (label_lng, label_lat) def mapkey(data):
# 把标签还原成经纬度
return data[0][0] * lng_step, data[0][1] * lat_step, data[1] # sc = SparkContext('local', 'gpsfreq') # 本地模式
sc = SparkContext('spark://hadoop10:7077', 'gpsfreq') # standalone 模式
rdd = sc.textFile('dwd.csv', 100) # standalone 模式 读取本地文件,必须在每个节点上都有这个文件,且路径一致 # print rdd.map(mymap).collect()
print rdd.map(mymap).groupBy(mygroup).mapValues(len).map(mapkey).collect()
输出长这样
[(111.8943, 32.629799999999996, 11), (109.2861, 34.2006, 42), (109.0467, 35.2155, 77), (111.72420000000001, 33.1755, 11), (111.636, 32.8542, 7)]
Standalone 模式读取 hdfs
需要启动 hadoop,并把数据传到 hdfs
hadoop fs -mkdir /spark
hadoop fs -put dwd.csv /spark
第一节中的代码只需改动一句
rdd = sc.textFile('hdfs://hadoop10:9000/spark/dwd.csv')
spark on yarn 模式读取 hdfs
yarn 模式只能读取分布式数据,如 hdfs
异常记录
1. 读取本地文件会出现 文件不存在
2. 如下异常
Caused by: org.apache.spark.SparkException:
Error from python worker:
/usr/bin/python: No module named pyspark
PYTHONPATH was:
/usr/lib/hadoop-2.6.5/tmp/nm-local-dir/usercache/root/filecache/46/__spark_libs__6155997154509109577.zip/spark-core_2.11-2.4.4.jar
解决方法
conf = SparkConf().setAppName('gps').setMaster('yarn')
# 下面两句解决 No module named pyspark
conf.set('spark.yarn.dist.files','file:/usr/lib/spark/python/lib/pyspark.zip,file:/usr/lib/spark/python/lib/py4j-0.10.7-src.zip')
conf.setExecutorEnv('PYTHONPATH','pyspark.zip:py4j-0.10.7-src.zip')
sc = SparkContext(conf=conf)
# yarn 模式必须读取 集群 中的文件,不能读本地
rdd = sc.textFile('hdfs://hadoop10:9000/spark/dwd.csv')
我重启机器后发现没有这两句竟然也可以,所以这里作为参考
spark-submit 命令:即使我在代码里指定了 master 为 yarn,spark-submit 运行时仍需指定 master,否则报错 No module named pyspark 【上面第二个异常】
bin/spark-submit --master yarn gpsfreq.py # 参数必须在 py 文件前面
python 命令:如果是 python 命令执行,无需额外指定 master
python gpsfreq.py
我的理解是 spark 无法找到 pyspark,因为 spark 并没有在任何地方和 pyspark 关联;
而 python 可以找到 pyspark,因为在 PYTHONPATH 中设置了 pyspark 的搜索路径
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/pyspark:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH
参考资料:
http://spark.apache.org/docs/latest/api/python/index.html 官网
https://www.360kuai.com/pc/99c84010bb76fd1fa?cota=4&kuai_so=1&sign=360_57c3bbd1&refer_scene=so_1
https://blog.csdn.net/cjhnbls/article/details/79254188
spark教程(七)-文件读取案例的更多相关文章
- 【学习笔记】tensorflow文件读取
目录 文件读取 文件队列构造 文件阅读器 文件内容解码器 开启线程操作 管道读端批处理 CSV文件读取案例 先看下文件读取以及读取数据处理成张量结果的过程: 一般数据文件格式有文本.excel和图片数 ...
- Python文件处理(txt、csv文件读取)
打开文件 使用Python内置的方法 open()可以打开文件 file object = open(file_name [, access_mode][, buffering]) file_name ...
- python文件读取和写入案例
python文件读取和写入案例 直接上代码吧 都是说明 百度上找了很多,最终得出思路 没有直接可以读取修改的扩展,只能先读取,然后复制一份,然后在复制出来的文件里面追加保存 然后删除读的那个,但是缺 ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- Spark教程——(11)Spark程序local模式执行、cluster模式执行以及Oozie/Hue执行的设置方式
本地执行Spark SQL程序: package com.fc //import common.util.{phoenixConnectMode, timeUtil} import org.apach ...
- SpringBoot进阶教程(七十四)整合ELK
在上一篇文章<SpringBoot进阶教程(七十三)整合elasticsearch >,已经详细介绍了关于elasticsearch的安装与使用,现在主要来看看关于ELK的定义.安装及使用 ...
- Smart3D系列教程5之 《案例实战演练2——大区域的地形三维重建》
一.前言 Wish3D出品的Smart3D系列教程中,前面一讲说明了小物件的照片三维重建,相信大家对建模的流程有了一定的了解.这次讲解中,我们将演示说明以一组无人机倾斜摄影照片为原始数据,通过Smar ...
- Smart3D系列教程4之 《案例实战演练1——小物件的照片三维重建》
一.前言 Wish3D出品的Smart3D系列教程已经推出3讲了,分别是关于倾斜摄影三维建模原理应用.照片采集技巧.Smart3D各个功能模块的作用,它们都是围绕Smart3D建模软件进行的讲解.那么 ...
随机推荐
- [BZOJ4033]:[HAOI2015]树上染色(树上DP)
题目传送门 题目描述 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加 ...
- hive分区表插入一条测试数据
1.show create table tb_cdr;+-------------------------------------------------------+--+| ...
- flask入门第一篇
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- Flask中session实现原理
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- kubernetes学习:CKA考试认证
考点 CKA认证针对考核成为当业界的Kubernetes管理员所需的技能. CKA认证考试包括这些一般领域及其在考试中的权重: 应用程序生命周期管理 - 8% 安装.配置和验证 - 12% 核心概 ...
- 2019.11.10【每天学点SAP小知识】Day3 - ABAP 7.40新语法 值转化和值赋值
1.语法为 CONV dTYPE|#(...)\ # 代表任意类型 "7.40之前表达式 . DATA helper TYPE string. DATA xstr TYPE xstring. ...
- Git(5):其他用法
分支操作 (1) 删除远程分支 $git remote add origin ssh://git@xxx.git ##如果未连接远程分支要先连接 $git push origin :<remot ...
- 非UI线程更新UI界面的各种方法小结
转载:https://www.cnblogs.com/xiashengwang/archive/2012/08/18/2645541.html 我们知道只有UI线程才能更新UI界面,其他线程访问UI控 ...
- Sqlserver实现故障转移 — sqlserver镜像备份实现故障转移(3)
目的:在已经加域的计算机上安装sqlserver2012,并配置数据库镜像实时同步,并实现故障转移. 在数据库层面实现故障自动转移后,应用程序里改怎么写数据库连接呢?其实使用ADO.NET或者SQL ...
- python基础--合并两个列表
a = [1,2,3] b = [4,5,6] # 将两个列表合并 # append方法是不行的 # a.append(b) # print(a) # [1, 2, 3, [4, 5, 6]] # 我 ...