自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鸭梨的博客

输出每一天

  • 博客(1073)
  • 收藏
  • 关注

原创 Parquet Serde

这样就能够在Hive中方便地查询和分析Parquet格式的数据了。

2023-06-10 10:12:05 489

原创 spark catalog与hive metastore的区别

但它们在实现方式和使用场景上有所不同。Spark Catalog是Spark内置的一个元数据管理组件,用于管理Spark数据源、表、视图等元数据信息。Spark Catalog支持多种数据源,包括HDFS、Hive、JDBC等,可以将这些数据源中的数据映射为Spark中的表,从而方便地进行数据处理和分析。。。Hive Metastore支持将Hive表关联到多种数据源,包括HDFS、HBase、Amazon S3等,从而支持对这些数据源中的数据进行SQL查询。

2023-06-10 09:22:30 893

原创 Scala 值类型与引用类型

Scala的根类是Any,它是所有Scala类的超类。Any有两个直接子类:AnyVal和AnyRef。AnyVal是所有值类型的父类(如Int、Boolean、Double等),而AnyRef则是所有引用类型的父类(如String、List、Option等)。Scala中的所有类都继承自Any,因此所有的Scala类都具备了一些基本的方法和属性,如equals、hashCode、toString等。

2023-05-10 23:18:31 689 1

原创 Scala class与object深入了解

在工厂方法中,将构造函数定义为私有的,是为了限制类的实例化。这样可以确保只有工厂方法可以创建类的实例,从而保证了代码的安全性和可维护性。如果我们将构造函数定义为公共的,那么外部代码就可以直接调用构造函数来创建类的实例,而不使用工厂方法。无法对创建的对象进行验证如果外部代码可以直接调用构造函数来创建类的实例,那么就无法对传入的参数进行验证。这可能导致一些错误的对象被创建,从而引发程序的错误。无法控制对象的创建如果外部代码可以直接调用构造函数来创建类的实例,那么就无法控制对象的创建。

2023-05-09 21:33:16 1125 2

原创 scala语法糖

Scala中的语法糖是一些简化代码的语法结构,使得代码更加易读、易写。在Scala中,我们可以使用函数字面量来定义一个匿名函数,例如: 在斯卡拉这个语法糖可以大大简化代码,使得函数定义更加清晰、简洁。这个语法糖可以被理解为一个类似于switch语句的结构,但是更加灵活、强大。在Scala中,类型参数的推断可以使得代码更加简洁、易读。这个语法糖可以让代码更加简洁、易读,但是需要注意隐式转换可能会带来不可预期的后果,需要谨慎使用。

2023-05-09 20:51:16 208

原创 柯里化入门

在 curriedAdd 中,我们使用了 Java 8 引入的函数式接口和 lambda 表达式,将一个接受两个参数的函数转换为了一个接受单个参数的函数。具体来说,柯里化的过程是将一个函数 f(x, y) 转换为一个接受参数 x 的函数 g(x),其中 g(x) 返回一个接受参数 y 的函数 h(y),最终 h(y) 返回 f(x, y) 的结果。这个过程中,也是将一个多参数函数变成了一系列函数的嵌套,每个嵌套函数都只接受一个参数,最终返回最终结果的函数。柯里化的语法可能不太直观,需要一定的学习成本。

2023-05-08 07:00:00 417

原创 Scala隐式参数

在这个例子中,我们定义了一个类型类Greetable,它有一个参数列表,包含一个名为greeting的String类型参数和一个名为a的类型参数。在这个例子中,我们定义了一个名为greet的函数,它有两个参数列表,第一个参数列表包含一个名为name的String类型参数,第二个参数列表包含一个名为greeting的String类型参数。在这个例子中,我们定义了一个名为greet的函数,它有两个参数列表,第一个参数列表包含一个名为name的参数,第二个参数列表包含一个名为greeting的参数。

2023-05-07 11:36:25 507 4

原创 编程语言的类型系统

另外,有些语言支持类型推断,例如Go语言和Scala语言,它们可以根据上下文自动推断变量类型,从而简化了类型注释的编写。类型系统可以使代码具有更好的文档和提示,从而帮助开发人员更快地理解和使用代码,减少代码的学习成本,提高代码的可读性和可维护性。例如,面向对象编程中的继承和多态性都需要类型系统的支持,而函数式编程中的强类型和静态类型语言更加注重类型的严格性和正确性。总之,类型系统可以通过类型检查、类型注释、清晰的代码组织、更好的文档和提示以及更好的工具和支持等方式提高代码的可读性和可维护性。

2023-05-07 10:25:00 469

原创 scala构造方法入门

辅助构造方法必须调用主构造方法或其他已经定义的辅助构造方法,这是 Scala 的语法要求。当定义一个辅助构造方法时,它必须以 def 关键字开始,后面跟着构造方法的名称和参数列表。在定义辅助构造方法时,我们可以使用 this 关键字调用类的其他构造方法。如果我们要调用主构造方法,则可以使用 this 关键字并传入主构造方法所需的参数列表;如果我们要调用其他辅助构造方法,则可以使用 this 关键字并传入其他辅助构造方法所需的参数列表。

2023-05-07 08:06:23 434

原创 从匿名函数到函数式编程

匿名函数是一种没有名称的函数,也被称为 lambda 函数或者函数字面量。和普通函数不同,匿名函数不需要在定义时指定函数名,通常是在需要的时候直接定义和使用。匿名函数通常被用作一次性的函数,例如作为其他函数的参数或者返回值。它们可以在运行时动态地创建,从而使代码更加灵活和可读。匿名函数的语法和使用方式因编程语言而异。add = lambda x , y : x + y print(add(1 , 2)) # 输出 3。

2023-05-06 23:33:02 405

原创 对比下java scala python的lambda

需要注意的是,Java、Scala 和 Python 中的 Lambda 表达式都有一些限制,例如不能访问非 final 变量、不能使用 break 或 continue 语句等。在上面的代码中,Lambda 表达式 lambda name: print(name) 接受一个名为 name 的参数,并将其打印到控制台上。在上面的代码中,Lambda 表达式 name => println(name) 接受一个名为 name 的参数,并将其打印到控制台上。在上面的代码中,Lambda 表达式。

2023-05-06 22:42:11 121

原创 函数式编程与命令式编程

函数式编程的反义词是命令式编程(Imperative Programming)。

2023-05-05 22:54:48 285

原创 对比下java scala python js 对不可变变量的处理

所以总体来说,Scala对不可变变量和不可变对象的支持最好,Java和JavaScript的支持较弱,Python不支持。选择语言时,如果需要线程安全和理想的不可变性,Scala会是更好的选择。如果需要灵活性和易变性,Python会更合适。Python和ES6: 不支持定义不可变对象。

2023-05-05 22:35:36 95

原创 heap和stack有什么区别

【代码】heap和stack有什么区别。

2023-05-03 09:18:00 123

原创 int 和 Integer 有什么区别

所以,如果不需要 Integer 类提供的方法,并且性能要求较高,优先选择 int。如果需要使用包装类的方法,或者在泛型中使用,选择 Integer。

2023-05-03 09:05:36 222

原创 用ai写个番茄钟并打包成exe

1 安装PyInstaller库:可以使用pip安装PyInstaller库,命令为。这将在dist文件夹中创建一个可执行文件,而不会弹出命令行窗口。打开命令行窗口并导航到TomatoClock应用程序的目录。prompt:用pyqt帮我写个番茄钟。

2023-04-22 18:50:16 183

原创 Parquet文件格式问答

在Parquet文件格式中,行组(Row Group)是一个逻辑单位,用于组织一组行(Record)和多个列(Column)的数据。行组包含了多个列的数据页(Data Page)以及对应的定义页(Definition Page),它们具有相同的行数和行顺序,并且使用相同的压缩算法和编码方式进行压缩。行组的主要作用是将一个大的数据集划分为多个较小的块,以便于处理和存储。通过将数据分组为多个行组,可以提高数据读取和查询的效率,同时也可以降低内存和磁盘的使用量,从而更好地支持大规模数据处理和分析。

2023-04-15 11:43:29 1893

原创 HDFS块问答

在Hadoop分布式文件系统(HDFS)中,块(Block)是指将大文件分割为固定大小的数据块后,存储在HDFS集群中的磁盘上的数据单元。HDFS的默认块大小为128MB,但可以通过配置进行修改。HDFS将文件分割为多个块,并将每个块的多个副本存储在HDFS集群中的不同节点上的不同磁盘上。这样做的好处是可以提高数据的可靠性和可用性。当客户端读取文件时,HDFS会自动将每个块的数据从不同的节点和磁盘上读取并组装成完整的文件,并将其返回给客户端。

2023-04-15 11:11:44 1537

原创 class类文件结构

class文件是什么?Class文件是一组以 8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件中,中间没有添加任何分隔符,这使得整个 Class 文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。...

2021-11-14 11:43:20 1034

原创 分代收集理论

什么是分代?当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(Generational Collection)的理论进行设计,所谓分代,就是将Java堆划分出不同的区域,然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。分代的目的?分代的目的是垃圾收集器可以更快的收集“死掉”的对象。 如何判定对象已死?请参考 https://cloud.tencent.com/developer/article/1694697如何分代?HotSpot JVM 将堆分为年轻

2021-11-13 10:59:15 1203

原创 JVM 和 HotSpot 的区别?

一个Java虚拟机(JVM)是从未被物理建成硬件假想计算机。JVM 运行编译成其虚构指令集的程序,该指令集作为称为字节码的中间表示写入存储。在运行时,字节码必须从虚构的指令集转换为主机 CPU 的实际指令集。这可以由口译员即时完成。或者字节码可以被完全编译和缓存,以比通过解释器运行得更快,在一个称为即时 (JIT) 编译的过程中。几十年来,有许多JVM 的实现。大多数都已经消失了。HotSpot是 JIT 技术的一种实现,它从运行解释开始,并观察应用程序的实际性能。然后选择应用程序的某些部分作为本机代

2021-11-13 09:40:50 3944

原创 Kafka安全机制

在0.9版本之前,Kafka集群是没有安全机制的。首先,客户端获取Zookeeper系统连接地址后,通过访问Zookeeper系统中的元数据信息来获取Kafka集群地址;然后,客户端可以直接连接到Kafka集群,访问Kafka集群上的所有主题,并对主题进行管理员操作。由于没有限制,一些重要的业务主题就会存在安全性问题。例如泄露敏感数据、删除主题、修改分区等。基于这类场景考虑,在0.9版本之后,Kafka系统新增了两种安全机制——身份验证和权限控制,来确保存储数据的安全性。身份验证在Kafka系统中,

2021-10-17 09:09:52 1072

原创 innodb逻辑存储结构

InnoDB存储引擎的逻辑存储结构和Oracle大致相同,所有数据都被逻辑地存放在一个空间中,我们称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页在一些文档中有时也称为块(block),1 extent = 64 pages,InnoDB存储引擎的逻辑存储结构大致如图所示。段上图中显示了表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。InnoDB存储引擎表是索引组织的(index organized),因此数据即索引,索引即数

2021-09-30 09:04:49 284 1

原创 MySQL 基数的定义

MySQL Cardinality 定义了一个术语,指的是要放入表列中的数据值的独特性。我们可以进一步说,在 MySQL 中,基数作为影响搜索、排序甚至数据聚类过程能力的属性负责。SHOW INDEX FROM a应改为Cardinality值比较大的列创建索引参考MySQL中Cardinality值的介绍 - 懒睡的猫熊 - 博客园...

2021-09-29 19:13:23 204

原创 Innodb缓冲池

缓冲池是主内存中的一个区域,用于在 InnoDB访问时缓存表和索引数据。缓冲池允许直接从内存访问经常使用的数据,从而加快处理速度。在专用服务器上,多达 80% 的物理内存通常分配给缓冲池。为了提高大量读取操作的效率,缓冲池被划分为可能包含多行的页面。为了缓存管理的效率,缓冲池被实现为页面的链表;很少使用的数据使用最近最少使用 (LRU) 算法的变体从缓存中老化。了解如何利用缓冲池将经常访问的数据保存在内存中是 MySQL 调优的一个重要方面。缓冲池 LRU 算法缓冲池使用 **LRU 算法的变体**

2021-09-29 09:24:26 429

原创 InnoDB 行格式

InnoDB表 的默认行格式由innodb_default_row_format 变量定义 ,其默认值为DYNAMIC。当ROW_FORMATtable 选项未明确定义或ROW_FORMAT=DEFAULT指定时,将使用默认行格式 。可以使用or 语句中的ROW_FORMAT选项 显式定义表的行格式 。例如:CREATE TABLE t1 (c1 INT) ROW_FORMAT=DYNAMIC;查看行格式 SHOW TABLE STATUS IN db2或者SELECT NAME, R

2021-09-28 13:42:47 511

原创 clickhouse 数据存储

表由按主键排序的数据片段(DATA PART)组成。当数据被插入到表中时,会创建多个数据片段并按主键的字典序排序。例如,主键是 (CounterID, Date) 时,片段中数据首先按 CounterID 排序,具有相同 CounterID 的部分按 Date 排序。不同分区的数据会被分成不同的片段,ClickHouse 在后台合并数据片段以便更高效存储。不同分区的数据片段不会进行合并。合并机制并不保证具有相同主键的行全都合并到同一个数据片段中。数据片段可以以 Wide 或 Compact 格式存储。

2021-09-23 09:24:04 1439

原创 clickhouse分布式DDL查询

默认情况下,CREATE、DROP、ALTER和RENAME查询仅影响执行它们的当前服务器。在集群设置中,可以使用ON CLUSTER子句以分布式方式运行此类查询。例如,以下查询在cluster中的每个主机上创建all_hits Distributed表:CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits)为了正

2021-09-23 09:13:39 633

原创 clickhouse分布式查询

集群设置中的服务器大多是独立的。你可以在一个集群中的一个或多个服务器上创建一个 Distributed 表。Distributed 表本身并不存储数据,它只为集群的多个节点上的所有本地表提供一个«视图(view)»。当从 Distributed 表中进行 SELECT 时,它会重写该查询,根据负载平衡设置来选择远程节点,并将查询发送给节点。Distributed 表请求远程服务器处理查询,直到可以合并来自不同服务器的中间结果的阶段。然后它接收中间结果并进行合并。分布式表会尝试将尽可能多的工作分配给远程服务器

2021-09-23 09:01:12 1707

原创 clickhouse 分布式表

分布式表一般用来查询,实际数据写入还是在本地式表在操作分布式表之前:1 连接到tutorial数据库。2 在MergeTree 引擎上创建hits_v1表,该表将位于所有集群主机上:(要在集群的每台机器上都要创建)CREATE TABLE tutorial.hits_v1 ON CLUSTER '{cluster}' ( <table structure> )ENGINE = MergeTree()PARTITION BY toYYYYMM(EventDate)ORDER BY (

2021-09-22 16:30:19 640

原创 Presto数组函数

下标运算符:[]该[]运算符用于访问数组的元素,并从 1 开始索引:SELECT my_array[1] AS first_element连接运算符: ||该||运算符用于将数组与数组或相同类型的元素连接起来:SELECT ARRAY [1] || ARRAY [2]; -- [1, 2]SELECT ARRAY [1] || 2; -- [1, 2]SELECT 2 || ARRAY [1]; -- [2, 1]数组函数all_match( array(T) , function(T

2021-08-18 09:20:59 5705

原创 presto distinct用法

单列select distinct colA from a;多列-- 不支持select distinct colA,colB from a;-- 支持select distinct row(colA,colB) from a;所有列select distinct * from a;但是如果还需要聚合,presto 不支持以下写法select count(distinct *) from a;可以用如下写法代替select count(*) from (select d

2021-08-17 15:20:07 2658

原创 Hive求周累计

一般的周累计selectdim1,dim2,weekofyear(day) as inc_week,count(*) as numfrom agroup by dim1,dim2,inc_week递进式每天的周累计with t1 as (selectdim1,dim2,weekofyear(day) as inc_week,from a)select dim1,dim2,count(*) over(partition by dim1,dim2,inc_week orde

2021-08-12 22:35:38 1116

原创 Hive实现笛卡尔积

如下方式可以实现笛卡尔积select * from a left join b on 1=1假设a表100行,b表20万行,则笛卡尔积后为100 * 20 w=2000 w行假设a表100行,b表20万*60行,则笛卡尔积后为100 * 60*20 w=12亿行假设a表1000行,b表20万行,则笛卡尔积后为1000 * 20 w=20000 w行=2亿行严重影响执行效率...

2021-08-12 22:27:52 3652

原创 Hive日期格式转换

目的把'20210405'转换为'2021-04-05'select from_unixtime(unix_timestamp('20210405','yyyyMMdd'),'yyyy-MM-dd')--2021-04-05

2021-08-12 09:33:01 748

原创 Hive求周环比

关键是找到上一周的同一天select date_sub ('2020-02-23', 7);--2020-02-16至于其他的就简单了

2021-08-12 09:28:47 396

原创 Hive 求月环比

SELECT ADD_MONTHS('2021-05-03', 3) FROM DateTest;-- 2021-08-03SELECT ADD_MONTHS('2021-05-03',-3) FROM DateTest;-- 2021-02-03这个有什么用呢?求环比的时候用得上

2021-08-12 09:19:10 298

原创 Hive按日加减

date_add(str date, int number of days)select date_add ('2020-02-23', 4);--2020-02-27注意 日期的格式不能是20200223这种格式,识别不了date_sub(str date, int number of days)select date_sub ('2020-02-23', 4);--2020-02-19参考Date Functions in Hive | How Does Date Function

2021-08-12 09:13:58 3812

原创 Flink 的应用场景和架构模型

在过去的十年里,面向数据时代的实时计算技术接踵而至。从我们最初认识的 Storm,再到 Spark 的异军突起,迅速占领了整个实时计算领域。直到 2019 年 1 月底,阿里巴巴内部版本 Flink 正式开源!一石激起千层浪,Flink 开源的消息立刻刷爆朋友圈,整个大数据计算领域一直以来由 Spark 独领风骚,瞬间成为两强争霸的时代。Apache Flink(以下简称 Flink)以其先进的设计理念、强大的计算能力备受关注,如何将 Flink 快速应用在生产环境中,更好的与现有的大数据生态技术完美结合

2021-08-11 09:14:00 279

原创 Spanner如何实现事务?

Spanner 最早来自 Google 的一篇论文,并最终成为 Google Cloud 的一个服务。Spanner 简单来讲是一种两阶段提交的实现.Spanner 的整体架构很复杂,包含的内容非常多。但核心主要是两个部分,分别是 TrueTime 和 Paxos Group。TrueTime分布式系统获取时间有两种方式:物理时间与逻辑时间。而由于物理时间不靠谱,分布式系统大部分使用逻辑时间。逻辑时间往往由一个节点生成时间戳,虽然已经很高效,但是如果要构建全球系统,这种设计就捉襟见肘了。而 True

2021-08-10 20:16:51 261

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除