/me/profile2.jpg

Java零基础教程(四.面向对象-继承inheritance)

1. 继承性的使用 面向对象的特征之二:继承性 一·继承性的好处 why? 减少了代码的冗余,提高了代码的复用性 便于功能的扩展 为之后多态性的使用,提供了前提 二·继承性的格式:class A extends B{} A: 子类,派生类,subclass B: 父类,超类,基类,superclass 体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的结构:属性,方法。 特别地,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。 只是因为封装性的影响,使得子类不能直接调用父类的结构而已。权限修饰符解决的是调用的问题。继承性解决的是能不能获取的问题。 子类继承父类以后,还可以声明自己特有的属性或方法,实现功能的扩展。 子类和父类的关系,不同于子集和集合的关系。 extends:扩展 三·Java中关于继承性的规定 一个类可以被多个子类继承 Java中类的单继承性:一个类只能有一个父类 子父类是相对的概念。 子类直接继承的父类,称为直接父类。间接继承的父类,称为间接父类。 子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法。 四· Object类 如果我们没有显式地声明一个类的父类的话,则此类继承于java.lang.Object类 所有的java类(除java.lang.Object类之外)都直接或间接的继承于java.lang.Object类 意味着,所有的java类具有java.lang.Object类声明的功能。 1 2 3 4 5 6 7 8 9 10 11 12 13 package com.atguigu.java; public class ExtendsTest { public static void main(String[] args) { Person p1 = new Person(); p1.

Java零基础教程(三.面向对象-封装Encapsulation)

1. 类和对象 1.1 面向对象的思想 一· Java面向对象学习的三条主线 Java类及类的成员:属性,方法,构造器,代码块,内部类 面向对象的三大特征:封装性,继承性,多态性,(抽象性) 其他关键字:this, super, static, final, abstract, interface, package, import等。 二·“人把大象装进冰箱” 面向对象:强调的是功能行为,以函数为最小单位,考虑怎么做。 把冰箱门打开 抬起大象,塞进冰箱 把冰箱门关闭 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 人 { 打开(冰箱) { 冰箱.开开(); } 抬起(大象) { 大象.进入(冰箱); } 关闭(冰箱) { 冰箱.闭合(); } } 冰箱 { 开开(){} 闭合(){} } 大象 { 进入(冰箱){} } 程序员从面向过程的执行者转化成了面向对象的指挥者。

Java零基础教程(二.基本语法)

1. 关键字 数据类型:class, interface, enum, byte, short, int, long, float, double, char, boolean, void 数值:true, false, null 流程控制:if, else, switch, case, default, while, do, for, break, continue, return 访问权限:private, protected, public 类,函数,变量的修饰符:abstract, final, static, synchronized 类与类关系:extends, implements 实例的创建,引用,判断:new, this, super, instanceof 异常处理:try, catch, finally, throw, throws 包:package, import 其他:native, strictfp, transient, volatile, assert 2. 标识符 标识符(aka变量方法类名)的命名规范: 包:都小写 xxxyyy 类,接口:XxxYyy 变量方法:xxxYyy 常量:XXX_YYY_ZZZ 3. 变量 3.1 数据类型 包含变量类型,变量名,和存储的值。变量都定义在其作用域内,在作用域内,它是有效的,除了作用域就失效了。 基本数据类型:整数类型byte(-128~127), short(两字节-2^15~2^15-1), int(四字节,-21亿~21亿), long(八字节,必须以小写或大写L结尾); 浮点类型float(四字节,必须以f或F结尾,精确到7位有效数字,范围-3.

Java零基础教程(一.概论)

1. 硬件介绍 1.1 CPU(中央处理器) 冯诺伊曼体系结构:冯诺伊曼被人们称为“计算机之父”。计算机由输入设备,输出设备,存储器,运算器,控制器构成。现代计算机中的CPU负责其中的运算与控制功能。 赫兹:现代计算机的计算速度以千兆赫(GHz)来表述。英文进制:KHz,MHz,GHz Intel i7-6700HQ:“6”第六代,HQ标压版本,U低压版本 摩尔定律:每一美元所能买到的电脑性能,每隔18-24个月翻一倍以上。 1.2 存储 硬盘 硬盘存储的数据断电不丢失(持久化设备)。在windows系统中,A/B盘的位置是预留给软驱的(软驱已经淘汰)。 内存 Read-Access Memory,内存存储数据速度比硬盘快10倍以上,其部分解决了CPU运算过快,而硬盘数据存取太慢的问题。断电会导致数据丢失 bit:二进制表示0/1 byte:8 bits,内存中每个byte拥有唯一的地址。 进制:1KB = 1024B, 1MB = 1024KB, 1GB = 1024MB, 1T = 1024GB, 1PB = 1024TB, EB,ZB,YB,以此类推。 ROM:手机的“硬盘”,例如16GB,128GB。但是经常被大众(误)叫做手机内存。 1.3 输入输出 输入设备: 鼠标键盘; 输出设备: 显示器打印机 1920x1080:像素矩阵 2K屏幕:比如2244x1080(2244>2000) 屏幕尺寸:屏幕对角线长度 像素密度:sqrt(长度像素数^2 + 宽度像素数^2) / 屏幕尺寸 1.4 通信设备 2. 计算机发展史 图灵:计算机之父,人工智能之父 冯诺伊曼:计算机之父,博弈论之父 www(万维网):简称web。www可以让Web客户端(如浏览器)访问浏览Web服务器上的页面。是一个由许多互相连接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样资源,并且由一个全局统一资源标识符(URI)标识;这些资源通过超文本传输协议HTTP(Hypertext Transfer Protocol)传送给用户,用户通过点击链接来获得资源。 万维网vs因特网vs互联网:他们是包含关系。万维网是无数个网络站点和网页集合。因特网除了万维网,还包括电子邮件等。 BS架构,CS架构:browser server(例如百度搜索); client server(例如QQ) 3. Java语言概述 3.1 编程语言 机器语言 -> 汇编语言 -> 高级语言(面向过程)-> 高级语言(面向对象)

《机器学习实战(第二版)》-读书笔记1

Chapter 1: The Machine Learning Landscape 下载github库中csv数据集: 1 2 3 4 5 6 7 import urllib.request DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/" os.makedirs(datapath, exist_ok=True) for filename in ("oecd_bli_2015.csv", "gdp_per_capita.csv"): print("Downloading", filename) url = DOWNLOAD_ROOT + "datasets/lifesat/" + filename urllib.request.urlretrieve(url, datapath + filename) 预处理pivot: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 def prepare_country_stats(oecd_bli, gdp_per_capita): # 筛选行 oecd_bli = oecd_bli[oecd_bli["INEQUALITY"]=="TOT"] # 抽取多行数据为多列数据 oecd_bli = oecd_bli.

Kaggle Regression Eda

数据的读入 特征的理解 特征的数据类型 1 df.info(verbose=True) # 查看每列缺省情况和数据类型 Pandas dtype Python type NumPy type Usage object str or mixed string_, unicode_, mixedtypes 字符串文本 int64 int int_, int8, int16, int32, int64, uint8, uint16, uint32, uint64 整数 float64 float float_, float16, float32, float64 浮点数 bool bool bool_ 真假 datetime64 NA datetime64[ns] 日期与时间 timedelta[ns] NA NA 日期时间差 category NA NA Finite list of text values 特征类型 这个步骤是用来理解数据中每一列的具体含义,通过查看feature与label的关系,可以检查是否符合自己的直观感受。比如,通常情况下,房子越大,房子越新,房价越高,等等。可以通过数据类型将每个feature划归到对应的特征类型,便于后续的分析与建模。

Spark 101: DataFrame基本使用

Example 1. DataFrame的5种基本操作 1.筛选行,2.选取列,3.增加行列,4.分组总结,5.排序 一个简单的工资数据集: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 df = spark.createDataFrame([ (1, 'sales', 4200), (2, 'admin', 3100), (3, 'sales', 4000), (4, 'sales', 4000), (5, 'admin', 2700), (6, 'dev', 3400), (7, 'dev', 5200), (8, 'dev', 3700), (9, 'dev', 4400), (10, 'dev', 4400) ], schema=['id', 'dept', 'salary']) df.

Spark: 解决数据倾斜的N种姿势

什么是数据倾斜? 对于Spark/Hadoop等分布式系统,机器间工作量的不均匀比单纯的工作量大更难处理,因为单纯的工作量大基本通过scale-out就可以解决。假设有100个任务并行处理,若任务间工作量相当,20台机器要比10台机器耗时减半(假设机器性能相当)。然而当任务间工作量相差巨大时(例如,任务中10个大任务,90个小任务,工作量差别1M倍),很难通过scale-out的方式充分利用并行优势,此时,完成总耗时取决于最慢的大任务何时完成(木桶原理)。 对于Spark这种计算引擎,工作量主要在于所需处理的数据量。因此当任务划分时,数据分布不均匀,即发生了数据倾斜。 数据是如何倾斜的? 当Spark产生shuffle操作时,相同key的数据会被放在相同的partition。因此当某一个key的数据量过大(即popular key),会造成partition间工作量巨大差别,造成数据倾斜。这样不仅影响了并行效率,更加容易造成内存不足,产生OOM(Out Of Memory)报错使整个应用崩溃。 常见会触发shuffle的算子:distinct, groupByKey, reduceByKey, aggregateByKey, join, cogroup, repartition。 如何识别数据倾斜? 观察stage进度条,发现大多数task很快执行完,但是剩余task等待时间巨长甚至出现OOM报错。(如上图) 查看Spark Web UI里的Shuffle Read Size/Records,查看任务间数据量分布是否均匀。 计算key的分布。(如下) 1 2 3 4 df.select("key").sample(false, 0.1) // 数据采样 .(k => (k, 1)).reduceBykey(_ + _) // 统计 key 出现的次数 .map(k => (k._2, k._1)).sortByKey(false) // 根据 key 出现次数进行排序 .take(10) // 取前 10 个。 发生了数据倾斜怎么办? 思路1 - 过滤异常数据 如果数据包含大量异常key,过滤掉就好了。 异常key: 空值 Null 无效数据,大量重复的测试数据或是对结果影响不大的有效数据 有效数据,业务导致的正常数据分布 对于情况1&2,直接过滤即可。对于3,直接过滤不适用,尝试以下其他方法。

Spark FAQ

什么是Job, Stage, Task? Spark数据处理是像流水线一样,通过一系列操作(算子)完成对RDD的处理, 即RDD1 -> RDD2 -> ...。操作分为两类:Transformation和Action。Spark使用lazy evaluation模式,即Transformation操作下达后,实际并不立刻运行,只有当遇到Action时才把之前所有的Transformation和当前Action运行完毕。每当一个Action触发,就会生成一个Job。因此Job以Action划分。Job之间是串行的,只有当前job结束,才会启动下一个job。 一个Job会被划分为一个或多个stage。在一个stage中,任务是可以并行计算的。stage是按照ShuffleDependency来进行划分的。两种依赖方式为窄依赖(narrow dependency)与宽依赖(wide dependency)。区分两种依赖的方法是看:父RDD的partition是否被多个(>1)子RDD的partition使用,若未被多个子RDD的partition使用,则为窄依赖,不需shuffle,不划分stage; 否则为宽依赖,划分stage。上图对比了两种依赖方式的不同。具体划分stage的算法是: 从最后一个RDD开始,从后往前推,找该RDD和父RDD之间的依赖关系,如果是窄依赖,会继续找父RDD的父RDD,如果是宽依赖,就会从该RDD开始到前面所有的RDD划分为一个stage,递归的出口是直到找不到父RDD,最后把所有的RDD划分为一个stage。 一个例子: 一个stage并行的任务称为task,对应一个partition的处理,即task总数为stage的partition总数。 参考 Wide vs Narrow Dependencies github blog stackoverflow, Does stages in an application run parallel in spark Queirozf Apache Spark Architecture Overview: Jobs, Stages, Tasks, etc cnblogs, qingyunzong csdn, Z_Data Spark by Examples, Spark Repartition vs Coalesce Arganzheng’s Blog, Spark数据倾斜及其解决方案