【Spark】Spark本地与StandAlone模式
AnacondaAnaconda是什么
1、Anaconda是一个工具包,里边包含了几百个开发工具,其中也包含Python2、Anaconda还可以模拟多个虚拟环境,在该虚拟环境中可以安装不同版本的软件,多个虚拟环境彼此独立,以后你可以自由选择使用哪一个虚拟环境3、你安装了Anaconda之后,自动会给你创建一个基础环境,名字为base
Anaconda常用命令
查看当前服务器安装的所有虚拟环境 conda env list
创建新的虚拟环境conda create -n 虚拟环境的名字 python=版本
切换虚拟环境conda activate 虚拟环境名称
退出虚拟环境-进入上一个虚拟环境conda deactivate
删除某个虚拟环境conda remove -n 虚拟环境名称 —all
查看虚拟环境中安装的软件包conda list
卸载软件包conda uninstall 包名 或pip uninstall 包名
Demo123456789101112131415161718192021222324252627282930313233343536373839404 ...
【Spark】初识PySpark
初识Spark按照知识点的重要性由高到低的顺序来进行归纳
分布式和集群这个东西一下让你说,你不一定能说的出来,概括一下吧
分布式: 强调的是将一个系统的资源由单机分散到多台机器上,一个字拆
强调多台机器做一样的事情
Spark模块
1、SparkCore:是Spark框架的核心,其他所有组件都基于SparkCore2、SparkSQL : 使用Spark + SQL语言来对大数据进行离线分析3、Spark Structed Streaming : Spark的实时部分,需要结合Kafka4、MLlib:Spark的机器学习库5:Graph:Spark的图计算
集群部署模式用的最多的就是Spark On Yarn模式 : Spark计算引擎 + Yarn调度器
12345678#1、本地模式(单机) 用于测试 #2、集群模式(多机) 了解:StandAlone模式 : Spark计算引擎 + Spark自带的资源调度器 重要:Spark On Yarn模式 : Spark计算引擎 + Yarn调度器 了解:Spark On Messos模式: Spark计算引擎 + Me ...
【Spark】PySpark刷题本(一)
PySpark交互式编程如下chapter2-data1.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
1234567Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
请根据给定的实验数据,在pyspark中通过编程来计算以下内容:
(1)该系总共有多少学生;
(2)该系共开设了多少门课程;
(3)Tom同学的总成绩平均分是多少;
(4)求每名同学的选修的课程门数;
(5)该系DataBase课程共有多少人选修;
(6)各门课程的平均分是多少;
(7)使用累加器计算共有多少人选了DataBase这门课。
Q1-求学生总数: 不管做什么首先需要从某个地方读取到需要处理的数据, Linux本地的路径协议是file://, 而HDFS的路径协议是hdfs://主机名:端口号. 所以第一步是读取文件,第二步是获取每行中的第一列. 第三步是将获取到的数据进行去重操作. 第四步是 ...
【PythonETL】订单数据采集业务
到这里整个ETL全过程已经结束了, 没有很多花里胡哨的东西, 全是干货, 简单做个总结吧!
订单数据采集
业务需求:
1)将采集的订单JSON数据保存到目标数据库中
2)将采集的订单JSON写出到 CSV 文件中
3)采集数据时JSON文件不能重复采集
实现思路:
获取订单文件夹下面有哪些订单JSON文件
查询元数据库表中已经被采集的订单JSON文件,来对比确定要采集新的订单JSON文件
针对待采集的新订单JSON文件,进行数据采集(ETL操作->mysql->csv)
将本次采集的订单JSON文件,记录到元数据库的表中
json模块的使用
json.loads 将JSON字符串数据转换为Python中的数据类型
json.dumps 将python中的数据类型转换为JSON字符串
jsonloads和jsonload的最大区别就是jsonload的参数是一个json文件,而jsonloads的参数是字符串
事务: 注意事务的开启时机以及事务的提交时机,事务的提交时机是一个文件写入完毕,没有出现错误,由此可以判断事务的开启时机元数据: 注意元数据表中的字段(id自 ...
【PythonETL】条码商品采集业务
商品数据采集主要分为三个部分: 1, 获取上次记录的最大时间值(从元数据库的表中获取). 2, 根据上一次采集商品数据中updateAt的最大值查询数据源库商品表,获取继上一次采集之后,新增和更新的商品数据.3, 针对新增和更新的商品数据,进行数据采集(ETL->mysql->csv)
需要优化的点:1,使用事务,事务的使用需要结合try, except, else来使用.同时注意执行事务操作不需要调用工具类中的execute函数,因为函数会自动commit, 所以需要自定义without_commit,而且如果设置每执行1000条sql就提交一次事务,而在for,else中使用事务再次提交一次2,使用日志工具(每执行1000句sql就记录一下,同时提交事务.日志的设置比较随便,仁者见仁智者见智.3,将读取到的数据记录写入元数据表中,注意元数据表中的字段,一个是记录本次采集的最大时间(updatetime),以及采集到了哪一行,方便后续的采集动作.4,使用time工具计算执行所需的时间,strat_time = time.time()
模型文件
使用一个元 ...
【PythonETL】日志文件处理
日志文件处理
这个主题主要工作大体上分为两个部分,第一部分是从元数据库中获取已经处理的文件,然后将文件与全部文件(列表)进行对比,最后获取需要处理的文件列表.第二个部分是将日志文件输出到数据库中,并且对文件进行备份操作(转为csv文件)
Experience
首先由于python解释器以及pycharm是在虚拟机中运行的,导致我的文件路径python一直读取不了,所以日志文件目录也是获取不了的.(后来发现是系统的权限的原因,权限我改不了,直接换路径)
需要有列表嵌套对象的思想,我觉得这是ETL中最重要的,学生管理系统教会了我列表中嵌套字典,这也是一种收获吧!
要通过事务来写入数据到mysql中,遇到报错要回滚,没有报错再提交,还有读取一个文件需要flush一次,以及提交一次到数据库中吧
PART1
从元数据库中获取已经处理的文件
首先创建一个元数据库的连接
调用mysql_util快速获取一个对象
查看元数据库是否存在,不存在则创建(mysql_util中的方法)
查询元数据库中的元数据表(得到元组嵌套元组)
因为file_util工具对比的是两个列表需要将元组转换为列表
...
【PythonETL】工欲善其事,必先利其器
LoggingModule 日志模块
作用: 方便后续在 ETL 程序中记录日志
目标: 当我们在项目的其他位置使用logging模块进行日志记录时,不需要进行配置或者只需要进行简单的配置即可使用.
为了更方便的使用logging,我们在日志模块中创建一个日志类Logging,专门管理日志器对象
重点: 在创建日志类时可以同时传入日志级别,方便日志级别控制
创建init_logger函数快速创建日志器对象,并完成日志处理器和日志格式的绑定.
重点: 返回值是一个日志器对象
首先回顾一下日志logger的食用方式.
创建日志对象logger = logging.getLogger()
创建文件处理器FileHandler(流处理器StreamHandler) handler = logging.FileHandler()
创建日志格式对象fmt = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
给处理器设置格式handler.setFormatter(fat)
将处理器 ...
【Java查漏补缺(四)】常用API之ArrayList
ArrayList是什么
ArrayList表示一种集合,它是一个容器,用来装数据的,类似于数组。
Q: 那有了数组,为什么要有集合呢?
A: 因为数组一旦创建大小不变,比如创建一个长度为3的数组,就只能存储3个元素,想要存储第4个元素就不行。而集合是大小可变的,想要存储几个元素就存储几个元素,在实际工作中用得更多。
ArrayList常用方法
创建一个ArrayList的集合对象ArrayList <String> list = new ArrayList<>()
往集合中的某个索引位置处添加一个数据list.add(0,"小威");
根据索引获取集合中某个索引位置处的值list.indexOf("小威")
获取集合的大小list.size()
根据索引删除集合中的某个元素值,会返回被删除的元素值list.remove(0)
根据元素值删除某个元素,删除成功会返回true,反之false.list.remove("小华")
修改某个索引位置处的数据,修改后会返回原来的值list.s ...
【Java查漏补缺(三)】常用API之String
String字符串定义
1. String是什么,可以做什么?答:String**代表字符串,可以用来创建对象封装字符串数据,并对其进行处理。2.String类创建对象封装字符串数据的方式有几种?方式一: 直接使用双引号“…” 。方式二:new String类,调用构造器初始化字符串对象。
基础Code
12345678910111213String name = "小明";System.out.println(name);String s1 = new String("小李");System.out.println(s1);char[] char1 = {'a', '挨', '踢'};String s2 = new String(char1);System.out.println(s2);byte[] by = {99, 65, 102}; // 注意a = 65 A = 97String s3 = new String(by);Syst ...
【剑指offer】树
树Retrospect基本概念树
节点的度数为节点的孩子个数(和图不一样,出度和入度都是节点的度数)
树的节点数等于所有节点的度数和+1(二叉树的节点个数可以直接推算出来的(考试当场演算-ps:5语))
树根为第一层(学计算机的都知道万物是从0开始的(狗头) - 跟常识相违背啊)
度为m的树第i层最多有mi-1个节点
二叉树
n0=n2+1
第i层最多有2i-1个节点
h层二叉树最多有2h-1个节点
暂时就说这么多吧,都是应付考试的东西,讲真全靠记忆.
树的遍历Traversal
树的遍历分为先序遍历,中序遍历,后序遍历
口述一下三种方式的特征吧:
先序遍历(根 - 左 - 右)
中序遍历(左 - 根 - 右)
后序遍历(左 - 右 - 根)
例如:
先序序列:ABDEGHCF;
中序序列:DBGEHACF;
后序序列:DGHEBFCA。
补充:二叉树也称为二分树,它是树形结构的一种,其特点是每个结点至多有二棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的遍历序列按照访问根节点的顺序分为先序(先访问根节点,接下来先序访问左子树,再先序 ...