适配器设计模式,一个接口首先被一个抽象类先实现(此抽象类通常称为适配器类,比如下面的WindowAdapter),并在此抽象类中实现若干方法(但是这个抽象类中的方法体是空的),则以后的子类直接继承此抽象类,就可以有选择地覆写所需要的方法。
1 | interface Window{ //定义Window接口,表示窗口操作 |
适配器设计模式,一个接口首先被一个抽象类先实现(此抽象类通常称为适配器类,比如下面的WindowAdapter),并在此抽象类中实现若干方法(但是这个抽象类中的方法体是空的),则以后的子类直接继承此抽象类,就可以有选择地覆写所需要的方法。
1 | interface Window{ //定义Window接口,表示窗口操作 |
用户可以根据自己的需要定义自己的异常类,定义异常类只需要继承Exception类即可
1 | class MyException extends Exception{ //自定义异常类,继承Exception类 |
1.安装pyenv
1 | brew install pyenv |
2.是否安装成功
1 | pyenv -v |
3.安装python3.8.10,2.7.15和miniconda3-4.7.12
1 | pyenv install 3.8.10 |
查看可以安装的版本列表
1 | pyenv install --list |
4.查看安装的python版本
1 | pyenv versions |
Impala对于hive引擎的语法和hive原生的有些许不同,虽然使用hive的parser也能部分兼容,但是由于impala的parser是使用flex(Fast Lexical Analyzer Generator,快速词法分析生成器)和java cup(Java Constructor of Useful Parsers,生成语法分析器(parser)的工具)开发的,所以对impala的query进行语法解析的时候建议还是使用Impala原生的parser
1.在安装了impala的机器下找到impala-frontend的jar包(环境中的impala版本为2.12.0+cdh5.15.1+0)
1 | lintong@master:/opt/cloudera/parcels/CDH/jars$ ls | grep impala-frontend |
2.使用mvn install安装到本地仓库中,或者上传到私服仓库中
1 | mvn install:install-file -Dfile=/home/lintong/下载/impala-frontend-0.1-SNAPSHOT.jar -DgroupId=org.apache.impala -DartifactId=impala-frontend -Dversion=0.1-SNAPSHOT -Dpackaging=jar |
3.在工程中引入impala-frontend和java-cup,java-cup的版本可以使用反编译工具打开impala-frontend的jar进行确认
1 | <dependency> |
在解析select语句的时候如果报
1 | java.lang.NoClassDefFoundError: org/apache/sentry/core/model/db/DBModelAction |
在pom中添加
多态性在面向对象中主要有两种体现:
向上转型:子类对象–>父类对象,向上转型会自动完成
向下转型:父类对象–>子类对象,向下转型时,必须明确地指明转型的子类类型
虽然使用的父类对象调用fun1方法,但是实际上调用的方法是被子类覆写过的方法,也就是说,如果对象发生了向上转型关系后,所调用的方法一定是被子类覆写过的方法。
但是父类的a无法调用b类中的fun3方法,因为这个方法只在子类中定义,而没有在父类中定义。
1 | class C_1{ // 定义接口C_1 |
在子类中调用了父类中的fun2方法,fun2方法要调用fun1方法,但是此时fun1方法已经被子类覆写过了,所以调用fun2方法的时候还是调用被子类覆写过的方法
在进行对象的向下转型之前,必须首先发生对象的向上转型,否则将出现对象转换异常
1 | class C_1{ // 定义接口C_1 |
operator用于产生特定的DAG节点
1 | https://airflow.apache.org/docs/apache-airflow/stable/python-api-ref.html#operators |
下面是常用的operator及其用法
1 | https://airflow.apache.org/docs/apache-airflow/stable/_modules/airflow/models/baseoperator.html |
用法:
1 | https://airflow.apache.org/docs/apache-airflow/stable/_modules/airflow/sensors/base.html#BaseSensorOperator.poke |
用法:
sensor也是airflow的一种operator,用于检测某个条件是否达到。如果条件满足,sensor将会执行成功;如果条件不满足,sensor将会重试,直到超时,task超时的时候状态就位skipped。
下面是常用的几种sensor:
参考:Airflow Sensors : What you need to know
以及 How Airbnb Built “Wall” to prevent data bugs
二叉树:查找时间复杂度:最好:,最差
。最差情况是所有的数据全部在一端时。
二叉搜索树(二叉排序树、二叉查找树):查找时间复杂度:最好:,最差
。最差情况是所有的数据全部在一端时。
平衡二叉树:查找时间复杂度:
红黑树:查找删除插入时间复杂度: 红黑树是一种自平衡的二叉排序树,它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目。
红黑树(一棵自平衡的排序二叉树)五大特性:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
场景