优化ORC和Parquet文件,提升大SQL读取性能

从 Pandas 到 Polars 四十三:处理大于内存限制的Parquet文件 sink_parquet的一个很好的用例是将一个或多个大型CSV文件转换为Parquet格式,这样处理数据会更快。现在,Polars具有sink_parquet方法,这意味着您可以将流式查询的输出写入Parquet文件。在这个例子中,我们以惰性模式处理一个大型Parquet文件,并使用sink_parquet将输出写入另一个Parquet文件。需要注意的是,Polars的流式处理并非适用于所有操作,因此如果您的查询不支持流式处理,您可能会遇到内存溢出异常。path: (str) 输出文件的路径。 阅读详情

本文编译自IBM开发者社区,主要介绍了HDFS中小的ORC和Parquet文件的问题,以及这些小文件如何影响Big SQL的读取性能,并探索了为了提高读取性能,使用现有工具将小文件压缩为大文件的可能解决方案。

简介

众所周知,多个Hadoop小文件(定义为明显小于HDFS块大小的文件,默认情况下为64MB)是Hadoop分布式文件系统(HDFS)中的一个大问题。HDFS旨在存储大量数据,理想情况下以大文件的形式存储。在HDFS中存储大量小文件,而不是存储较少的大文件,这在管理文件的目录树时给NameNode增加了额外的开销。此外,MapReduce和其他读取HDFS文件的作业也会受到负面影响,因为它将涉及与HDFS的更多通信以获取文件信息。

小文件读取性能问题对于存储格式更为严重,在存储格式中,元数据被嵌入文件中以描述所存储的复杂内容。IBM Db2 Big SQL使用的两种常见文件存储格式是ORC和Parquet,这些文件格式以列格式存储数据,以优化读取和过滤列的子集。ORC和Parquet格式将有关列和行组的信息编码到文件本身中,因此,在对文件中的数据进行解压缩、反序列化和读取之前,需要处理元数据。由于这种开销,处理以逻辑方式捆绑在一起的这些格式的多个小型文件(例如,属于Big SQL表或分区的文件)会产生大量成本,并降低IBM Db2 Big SQL的读取性能。

建议解决方案:压缩

避免在存储级别使用小文件的一个好习惯是对逻辑上属于一起的目录里的小文件进行压缩。在Big SQL中,属于同一表的文件通常存储在同一目录中。IBM Db2 Big SQL的“文件检查工具”有助于识别HDFS中有问题的小文件,并提供文件压缩建议。将这些文件合并为更大的文件,会最大程度地减少要处理的元数据并更有效地将文件大小与HDFS块对齐,有助于提高Big SQL读取性能。

ORC和Parquet提供了它们自己的不同工具来进行文件合并或压缩:

  • ORC使用HIVE DDL
  • Parquet使用工具执行合并命令

ORC文件合并

使用Hive DDL(Hive Data Definition Language),用户可以通过在表或分区上执行concatenate命令来有效地合并小文件为更大的文件,命令如下:

ALTER TABLE table_name [PARTITION (partition_key = 'partition_value')] CONCATENATE;

Hive会在stripe级别合并ORC文件来降低数据压缩/解压和编解码的开销。

Parquet文件合并

作为Apache Parquet项目的一部分,有一组基于Java的命令行工具,称为parquet-tools。最新的parquet-tools版本包括一个merge命令,该命令可以将较小的parquet文件逻辑地追加到较大的parquet文件中。该命令以二进制形式将parquet文件块串联在一起,而无需序列化/反序列化、合并页脚、修改路径和偏移量元数据。

要在HDFS中运行parquet-tools merge命令:

hadoop jar parquet-tools-1.9.0.jar merge <input> <output>

其中,input是源parquet文件或目录,而output是合并原始内容的目标parquet文件,此合并命令不会删除或覆盖原始文件。因此,它需要手动创建一个临时目录,并用压缩后的文件替换原始的小文件,以使Big SQL或Apache Hive知道该文件。

另外,不管文件的存储格式如何,要考虑的解决方案是重新创建表并通过执行INSERT…SELECT进行压缩。

使用INSERT…SELECT合并文件

通过使用INSERT…SELECT语法直接创建一个新表作为原始表的副本来压缩效率低下的拆分数据,此过程将根据插入的并行度将数据重新组织为相对少量的较大文件。

以下是一个如何创建新表,然后在Big SQL中插入旧表中的数据的示例:

CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table select * from old_table;

该解决方案还允许通过将数据分区复制到新表中,删除原始分区并插入新的压缩分区来合并单个分区中的文件。

最后,如果需要保留小文件以供记录,建议使用Hadoop存档资源(Hadoop Archive Resources (har))对其进行存档,降低NameNode管理大量资源和对象的成本。

性能改进

内部测试表明,压缩ORC和Parquet小文件有助于显著提高Big SQL的读取性能。

针对ORC和Parquet格式进行测试的方案包括:

一百万行表以两种方式存储:

  • HDFS中30个大小不一的非最佳小文件
  • HDFS中的2个压缩大文件,是根据文件格式使用parquet tools或Hive DDL合并的小文件的结果

运行一个查询,计算一个数字列的总和,以通过访问所有列内容来给整个表施加压力:

SELECT SUM(column_name) FROM table_name;

结果表明:

  • 在ORC格式的非压缩表运行查询比在压缩表上运行查询多2倍的时间
  • 在parquet格式的非压缩表运行查询比在压缩表上运行查询多1.6倍的时间

这是针对ORC文件格式的压缩测试的输出,其中SLS_SALES_FACT_ORC是非压缩表,而SLS_SALES_FACT_COMPACTED_ORC是在非压缩表上运行CONCATENATE命令的表结果:

[host][bigsql] 1> SELECT COUNT(*) FROM GOSALESDW.SLS_SALES_FACT_ORC;
+---------+
| 1       |
+---------+
| 1000000 |
+---------+
1 row in results(first row: 0.393s; total: 0.395s)

[host][bigsql] 1> SELECT SUM(GROSS_PROFIT) FROM GOSALESDW.SLS_SALES_FACT_ORC;
WARN [State: 01003][Code: 0]: Statement processing was successful.. SQLCODE=0, SQLSTATE=01003, DRIVER=3.72.24
+------------------+
| 1                |
+------------------+
| 4615167406.55999 |
+------------------+
1 row in results(total: 7.681s)

[bigsql@host root]$ hdfs dfs -ls /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc
Found 30 items
drwxrwxrwx - bigsql hadoop 0 2017-12-14 17:54 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/._biginsights_stats
-rw-r--r-- 3 bigsql hadoop 443027 2017-12-14 17:53 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_-307213540_201712140553882_1.1
-rw-r--r-- 3 bigsql hadoop 179411 2017-12-14 17:53 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_-307213540_201712140553882_1.2
-rw-r--r-- 3 bigsql hadoop 897796 2017-12-14 17:49 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_-412191103_201712140549330_1.1
-rw-r--r-- 3 bigsql hadoop 1176528 2017-12-14 17:49 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_-412191103_201712140549330_1.2
-rw-r--r-- 3 bigsql hadoop 3356 2017-12-14 17:59 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_-710448882_201712140559369_1.1

...
-rw-r--r-- 3 bigsql hadoop 52854 2017-12-14 18:09 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_-451786036_201712140609603_2.2
-rw-r--r-- 3 bigsql hadoop 435203 2017-12-14 18:09 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_215889957_201712140609092_1.1
-rw-r--r-- 3 bigsql hadoop 1218285 2017-12-14 18:09 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_215889957_201712140609092_1.2
-rw-r--r-- 3 bigsql hadoop 2112684 2017-12-14 17:51 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_orc/i_1512166475533_866891040_201712140551232_2.2

[host][bigsql] 1> SELECT COUNT(*) FROM GOSALESDW.SLS_SALES_FACT_COMPACTED_ORC;
+---------+
| 1       |
+---------+
| 1000000 |
+---------+
1 row in results(first row: 0.379s; total: 0.381s)

[host][bigsql] 1> SELECT SUM(GROSS_PROFIT) FROM GOSALESDW.SLS_SALES_FACT_COMPACTED_ORC;
WARN [State: 01003][Code: 0]: Statement processing was successful.. SQLCODE=0, SQLSTATE=01003, DRIVER=3.72.24
+------------------+
| 1                |
+------------------+
| 4615167406.55999 |
+------------------+
1 row in results(total: 3.673 s)

[bigsql@host root]$ hdfs dfs -ls /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_compacted_orc
Found 3 items
drwxrwxrwx - bigsql hadoop 0 2017-12-14 18:14 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_compacted_orc/._biginsights_stats
-rwxrwxrwx 3 bigsql hadoop 19602272 2017-12-15 12:19 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_compacted_orc/000000_0
-rwxrwxrwx 3 bigsql hadoop 3720403 2017-12-15 12:19 /apps/hive/warehouse/gosalesdw.db/sls_sales_fact_compacted_orc/000001_0

注意:这些测试使用单个数据集来测量压缩表的性能,我们建议您在运行文件压缩之前测试自己的基准,并研究该操作带来的性能优势。

需要注意的

建议对上述存储格式的文件脱机运行修改操作,真正的问题是写入或删除文件的操作如何不影响当前正在运行并访问旧文件的查询任务,压缩文件本身并不复杂,但是不影响正在使用文件的任务可能会成为问题。

此外,表信息存储在Big SQL以及Hive Metastore中,该信息包含与表关联的实际文件的详细信息。使用Parquet工具压缩文件时,至少需要更新Hive Metastore以反映新文件。Big SQL具有在Hive Metastore中拉取更改并将其传播到其自己的catalog中的逻辑。

参考资料

编译自:Optimizing ORC and Parquet files for Big SQL queries performance

Parquet与ORC:高性能列式存储格式 背景随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive、Spark SQL、Impala、Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile、ORC、Parquet等,本文主要从实现的角度上对比分析 阅读详情

相关推荐

ORC与Parquet存储格式对比

ORC与Parquet均为列式存储结构,那么他们有什么不同呢? Apache Parquet 源自google Dremel 系统,Parquet 相当一Dremel中的数据存储引擎,而Apache顶级开源醒目 Drill正式Dremel的开源实现. Apache Parquet 最初的设计动机是存储嵌套式数据,比如Protocolbuffer thrift json 等 将这类数据存储成列式格式以方便对其高效压缩和编码, 且使用更少的IO操作取出需要的数据,也是Parquet 相比于ORC的优势,它能

欲望以提升热忱 毅力以磨平高山 3954

parquet表增加一列后不能正常读取

问题描述 parquet表,使用add column 增加一列后用Impala查询报错: Parquet表增列后hive查询正常,但是Impala查询不正常。 解决办法 在新加的这一列插入数据即可

ChengYanan的博客 1029

高效数据存储:列式存储、分区、索引优化(Parquet、ORC、数据分桶)

列式存储(Parquet/ORC):适用于 OLAP 查询,提高 I/O 效率。数据分区:减少扫描范围,加快查询。数据分桶:提高 Join 和聚合效率。索引优化:加速查询,提高查询性能。在实际应用中,需要根据业务需求选择合适的存储优化策略,以提升大数据处理的性能和可扩展性。

晴天彩虹雨的博客 1357

Parquet文件详解

Apache Parquet是Apache Hadoop生态系统的一种免费的开源面向列的数据存储格式。它类似于Hadoop中可用的其他列存储文件格式,如RCFile格式和ORC格式。本文将简单介绍一下Parquet文件的结构。数据首先写入文件,元数据最后写入单遍(single pass)写入。首先让我们看一下Parquet文件的格式,然后再看一下元数据。Parquet 的存储模型主要由行组(Row Group)、列块(Column Chuck)、页(Page)组成。

weixin_42704604的博客 1万+

批处理数据压缩:ORC vs Parquet性能对比

在大数据生态中,高效的数据存储是批处理作业(如ETL、大规模分析)的生命线。

Java大师兄的博客 1116

parquet-tools.jar

查看parquet文件工具 使用方式:java -jar xxx.jar usage: parquet-tools cat [option...] <input> where option is one of: --debug Enable debug output -h,--help Show this help string -j,--json Show records in JSON format. --no-color Disable color output even if supported where <input> is the parquet file to print to stdout usage: parquet-tools head [option...] <input> where option is one of: --debug Enable debug output -h,--help Show this help

hive读取hdfs存放文件_处理 HDFS 上的过多小文件的问题?

最近检查发现生产环境 HDFS 上文件和目录数量已经有 70w+ 个,对 namenode 的压力也越来越大,需要对 HDFS 上的小文件进行合并处理,但并非所有文件都可以合并,一般是针对 Hive 表映射在 HDFS 的文件进行合并来减少文件数量,下面整理出来的 3 个处理方法:方法一使用官方工具 parquet-tools 合并指定的 parquet 文件使用 parquet-tools 对多...

weixin_39607450的博客 639

parquet-tools:拼花工具和依赖项jar文件

实木复合地板工具 此回购协议收集parquet-tools和依赖项jar文件。 它还提供了一个shell脚本,通过将所有依赖项jar列出到classpath参数中,可以轻松地调用parquet-tools。 用法 ./parquet-tools.sh <command> ./parquet-tools.sh meta <parquet> ./parquet-tools.sh dump <parquet> ./parquet-tools.sh schema <parquet> ./parquet-tools.sh cat <parquet>

ORC 和 Parquet比较入门

ORC 和 Parquet 都是 Hadoop 生态系统中流行的开源列文件存储格式,在效率和速度方面非常相似,最重要的是,它们旨在加快大数据分析工作负载。使用 ORC 文件与处理 Parquet 文件一样简单,因为它们提供了高效的读写功能,比基于行的对应文件更高效。两者都有其优缺点,很难找出哪一个比另一个更好。让我们更好地看看它们。我们先从 ORC 开始,然后转到 Parquet。 ORC ORC (Optimized Row Columnar),是专为 Hadoop 工作负载设计的免费开源列存储格式。正如

鸭梨的博客 5590

使用 Cadence ams 仿真器 对 混合信号电路 进行仿真

文章目录Cadence 基于ams仿真器的混合信号电路仿真建立数字(Digital)模块建立 Analog - Digital 混合仿真原理图建立 Analog - Digital 混合仿真config文件配置混合信号电路仿真环境针对混合信号电路demo进行仿真 Cadence 基于ams仿真器的混合信号电路仿真 你好,这里是一篇关于使用 Cadence 软件通过 ams 仿真器对混合信号电路(D...

mymatin1004的博客 2万+

crowdcountingp2p代码复现

前面学习了一下论文:Improved Field-Based Soybean Seed Counting and Localization with Feature Level Considered该论文的模型原型由CrowdCounting-P2PNet改进而来这里先复现一下CrowdCounting-P2PNet模型,然后再学习P2PNet-Soy模型。

m0_73832962的博客 2327

ORC和Parquet格式的选择

重点:ORC只支持snappy压缩格式,但是snappy不支持分片,如果文件较大只能通过一个task读取,会导致map读取的数据倾斜;Parquet支持snappy和lzo压缩,lzo支持分片,所以如果存在大文件(压缩之后的大小远大于128M),则适合采用 Parquet + lzo压缩的方式。 ORC和Parquet都属于行列式的存储格式,那么在Hive中如何进行选择呢? ORC create table student_txn (id int, name string ) //指定存储格式 stored

ChengYanan的博客 1786

人形机器人五大核心零部件技术解析与国产化实况

人形机器人并非简单机械集成,而是物理、能量、感知、决策与执行五层系统毫秒级协同的复杂体。其性能瓶颈往往不在于整机算法,而深植于谐波减速器的刚度稳定性、无框力矩电机的功率密度与温升控制、六维力传感器的动态响应与温漂抑制、运动控制器的实时OS生态及灵巧手的多指协同精度等底层硬件能力。这些部件共同构成整机68.3%的成本,且国产化率差异显著——谐波减速器达72%,而高精度力矩传感器仍受制于日德厂商。本文聚焦‘谐波减速器’和‘六维力传感器’两大热词,从材料工艺、参数定义、失效模式到产线验证,揭示真正卡脖子的技术关卡

weixin_29065959的博客 406

hive orc 和 parquet简单对比

Impala推荐使用parquet格式,不支持ORC,Rcfile - Hive 0.x版本推荐使用rcfile - PrestoDB推荐使用ORC - Spark支持ORC,Parquet,Rcfile Parquet与ORC对比 orc.compress:表示ORC文件的压缩类型,「可选的类型有NONE、ZLB和SNAPPY,默认值是ZLIB(Snappy不支持切片) parquet. compression:默认值为 UNCOMPRESSED,表示页的..

oracle8090的博客 2088

ESP32-C5 Wi-Fi CSI感知技术原理与工程实践

Wi-Fi信道状态信息(CSI)是OFDM系统中反映多径信道特性的复数频域响应,源于导频子载波的信道估计过程,本质属于物理层原始观测数据。其高维度(如56子载波)、高时间分辨率(百赫兹级采样)及零硬件增益的特性,使其成为无感人体感知的理想信号源。相比UWB或毫米波雷达,CSI方案依托现有Wi-Fi基础设施,兼具成本优势与部署灵活性,广泛应用于呼吸监测、跌倒检测、手势识别等边缘智能场景。乐鑫ESP32-C5通过5.8GHz低噪接收、亚纳秒级多天线同步与固件级CSI增强,显著提升微动感知鲁棒性,结合AGC锁定、

weixin_42153793的博客 343

台积电技术研发实力

台积电技术研发实力 台积电在半导体行业的地位毋庸置疑。他们究竟有多强大,大部分读者了解得可能非常片面。从最新公布的2019年财报里,看看台积电的真正实力。 一、台积电在市场上的地位 根据公司财报,台积公司在先进制程技术、特殊制程技术,以及先进封装技术的发展上持续领先全球集成电路制造服务领域,2019年的市场占有率为52%。台积公司总体营收以地区划分(主要依据客户营运总部所在地),来自北美市场的营收占台积公司总体营收的60%、日本与中国大陆以外的亚太市场占9%、中国大陆市场占20%、欧洲、中东及非洲市场占6

吴建明wujianming_110117 1900

Hive性能提升利器:深度解析文件存储格式选择,ORC与Parquet为何成为首选?

在大数据技术快速演进的今天,Hive作为构建在Hadoop之上的数据仓库工具,在企业级数据处理中依然占据着核心地位。根据IDC最新报告,2025年全球数据总量预计将突破250ZB,其中企业级结构化数据占比超过40%,这使得数据存储与处理效率成为企业数字化转型的核心挑战。然而,许多用户在使用Hive时往往忽略了其底层文件存储格式的重要性,而这恰恰是决定数据处理效率的关键因素之一。文件存储格式不仅直接关系到存储空间的利用效率,更对查询性能、数据压缩、乃至整个数据管道的吞吐量产生深远影响。

zuiyuelong的博客 1293

PCL 区域生长分割【2026最新版】

区域生长算法原理介绍、代码实现以及一个具体实验场景的应用案例进一步实现将分割结果的分类保存至本地文件夹。最近一次更新时间为:2026年5月4日。

点云侠的博客 40万+

列存储ORC及与Parquet比较

一、ORC Apache ORC(Optimized Row Columnar,优化行列)是Apache Hadoop生态系统的一种免费、开源、面向列的数据存储格式。类似于Hadoop生态系统中可用的其他列存储文件格式,例如RCFile和Parquet。它与Hadoop环境中的大多数数据处理框架兼容。2013年2月,Hortonworks与Facebook合作宣布了“优化行列”(ORC)文件格式。一个月后,Cloudera和Twitter开发了Apache Parquet格式。 ...

liwenbluesky的专栏 1941

【OpenClaw从入门到精通】第20篇:OpenClaw实战—从零搭建教育自动化助教系统(作业批改+智能答疑+学情分析)【2026实测】

本文基于OpenClaw开源框架,聚焦教育行业“答疑重复、批改耗时、学情模糊”三大核心痛点,提供从环境部署到功能落地的全流程实操方案。通过整合QQ群交互、代码分析、数据可视化等技能,构建“智能答疑+作业批改+学情分析”的自动化助教系统。系统支持7×24小时群聊答疑、多语言作业自动评审、学情数据周报生成,经实测可使助教工作时间减少60%、作业批改效率提升5-10倍、学情问题识别提前5周。文中包含完整配置步骤、可直接运行的代码示例及避坑指南,兼顾新手入门与进阶实操,帮助教育工作者快速落地自动化工具,从重复劳动中

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1448

模型预测控制 (MPC, Model Predictive Control) 算法详解及案例分析

模型预测控制是一种基于模型的控制策略,通过在线求解一个有限时域的优化问题,预测系统的未来行为,并根据预测结果调整控制输入,以实现系统的稳定性和性能优化。

闲人编程的博客 2934

数据的存储方式(Parquet、ORC)

数据的存储文件格式

有问题的请私信或关注v【技术印记】留言 3809

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《还在纠结 Hive 用 ORC 还是 Parquet?一文彻底搞懂》

ORC与Parquet是大数据领域两大主流存储格式,各有优势。ORC压缩率高(3:1~10:1),适合Hive查询优化的场景;Parquet跨平台兼容性好,支持复杂嵌套数据,在Spark等引擎中表现更优。数仓建设建议分层使用:ODS层用Parquet保证通用性,DW层用ORC提升压缩和查询性能,ADS层再用Parquet兼容下游分析。实际选型需结合存储压力、查询引擎和业务场景,混合使用效果最佳。

weixin_44519124的博客 837

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: YARN任务监控界面Aggregate Resource Allocation指标解析
下一篇: 一步一步理解Impala query profile(一)
Viking_bird
博客等级 码龄11年 92粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值