OSS数据湖实践——parquet格式

丰富的线上&线下活动,深入探索云世界

做任务,得社区积分和周边

最真实的开发者用云体验

让每位学生受益于普惠算力

让创作激发创新

资深技术专家手把手带教

遇见技术追梦人

技术交流,直击现场

海量开发者使用工具、手册,免费下载

极速、全面、稳定、安全的开源镜像

开发手册、白皮书、案例集等实战精华

为开发者定制的Chrome浏览器插件

结构化数据源对数据定义了一种模式。通过这些关于底层数据的额外信息,结构化数据源提供高效的存储和性能。例如,列式数据存储Parquet和ORC,使得从一个列子集中提取数据更加容易。当数据查询只需要获取一少部分列的数据时,通过遍历每行数据的方式需要查询出过多的数据。基于行的存储格式,如Avro通过高效的序列化存储数据提供了存储优势。但是,这种优势是以复杂性为代价的。例如,由于结构不够灵活,模式转换将成为挑战。

半结构化数据源是每行记录一个结构,但不需要对整体记录有一个全局的模式定义。因此,每行记录是通过其自身的模式信息对其进行扩充。JSON和XML就是其中最流行的例子。半结构化数据的优势在于通过每行记录自身的描述信息,增强了展示数据信息的灵活性。由于有很多轻量级的解析器用于处理这些记录,因此半结构化数据格式在很多应用中普遍被使用,并且在可读性上存在优势。但是,它的主要缺陷也在于会产生额外的解析开销,不能专门应用于即席查询。

列式存储(Column-orientedStorage)并不是一项新技术,最早可以追溯到1983年的论文Cantor。然而,受限于早期的硬件条件和使用场景,主流的事务型数据库(OLTP)大多采用行式存储,直到近几年分析型数据库(OLAP)的兴起,列式存储这一概念又变得流行。总的来说,列式存储的优势一方面体现在存储上能节约空间、减少IO,另一方面依靠列式数据结构做了计算上的优化。

行式存储通过逐行组织数据,所有的数据在存储介质上通过首位相连、逐条存储,行式存储是一种传统的组织数据的方法。

ApacheParquet是Hadoop生态系统中通用的列式存储格式,独立于数据处理框架、数据模型、编程语言;Parquet的灵感来自于2010年Google发表的Dremel论文,文中介绍了一种支持嵌套结构的存储格式,并且使用了列式存储的方式提升查询性能。

如果有大批量的Json格式数据需要转为Parquet格式数据,参考以下代码;

importosimportmultiprocessingfromjson2parquetimportconvert_jsondefsplit_file(file_name,path):result_path="parquet/"file_path=path+file_nameres_path=result_path+file_name+".parquet"convert_json(file_path,res_path)defmain():path="data/"file_list=os.listdir(path)pool=multiprocessing.Pool(processes=20)forfile_nameinfile_list:pool.apply_async(split_file,(file_name,path,))pool.close()pool.join()if__name__=='__main__':main()Parquet格式运行任务使用parquet数据格式,来运行作业,使用sparkreadapi中的parquet接口;其中包括可以读指定的单个文件,或者一组文件;

spark.read.parquet("yourparquetfileorfiles")读取单个parquet文件方法

/***LoadsaParquetfile,returningtheresultasa`DataFrame`.Seethedocumentation*ontheotheroverloaded`parquet()`methodformoredetails.**@since2.0.0*/defparquet(path:String):DataFrame={//Thismethodensuresthatcallsthatexplicitneedsingleargumentworks,seeSPARK-16009parquet(Seq(path):_*)}读取一组paruqet文件方法

/***LoadsaParquetfile,returningtheresultasa`DataFrame`.**YoucansetthefollowingParquet-specificoption(s)forreadingParquetfiles:*

    *
  • `mergeSchema`(defaultisthevaluespecifiedin`spark.sql.parquet.mergeSchema`):sets*whetherweshouldmergeschemascollectedfromallParquetpart-files.Thiswilloverride*`spark.sql.parquet.mergeSchema`.
  • *
*@since1.4.0*/@scala.annotation.varargsdefparquet(paths:String*):DataFrame={format("parquet").load(paths:_*)}简单作业使用parquet数据源示例

importorg.apache.spark.sql.{Row,SparkSession}importorg.apache.spark.sql.expressions.Windowimportorg.apache.spark.sql.functions.row_numberobjectOSSExample{defmain(args:Array[String]):Unit={valspark=SparkSession.builder.appName("OSSExample").getOrCreate()valdata=spark.read.parquet.load("oss://your-bucket-name/parquetfile")valdata1=data.groupBy("subject","level").count()valwindow=Window.partitionBy("subject").orderBy(org.apache.spark.sql.functions.col("count").desc)valdata2=data1.withColumn("topn",row_number().over(window)).where("topn<=1")data2.write.format("parquet").save("yourstorepath")}}作业性能对比

1、可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量,提升作业运行性能;2、压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如RunLengthEncoding和DeltaEncoding)进一步节约存储空间;这样能够更少的使用OSS存储空间,减少数据存储成本;3、只读取需要的列,支持向量运算,能够获取更好的扫描性能。

THE END
1.学习笔记:DB29基础superdebug通过查看相关的对象,可以更好地理解数据库的结构,了解数据库中现有的对象以及它们之间的关系。例如,如果想删除一个有相关视图的表,Show Related 特性会识别出在删除这个表之后哪些视图会失效。 10、过滤(Filter) 可以对任何 DB2 工具的内容面板中显示的信息进行过滤。还可以对查询返回的信息进行过滤(比如限制结果集中https://redhat.talkwithtrend.com/Article/188197
2.mongoDB和mysql对比分析及选择(详细版)数据库其它比如我们熟知的例子,学生-课程-老师关系,如果用引用模型来实现三者的关系,可能会比内嵌模型更清晰直观,同时会减少很多冗余数据。 当需要实现复杂的树形关系的时候,可以考虑引用模型。 四、应用场景分析 1、MongoDB的应用场景 1)表结构不明确且数据不断变大 MongoDB是非结构化文档数据库,扩展字段很容易且不https://www.jb51.net/database/287301v7z.htm
3.数据架构:大数据数据仓库以及DataVault非重复型非结构化信息与重复型非结构化记录有着根本性的不同。对于非重复型非结构化记录而言,它们无论在形式还是内容上都很少重复或者根本不重复。非重复型非结构化信息的例子有电子邮件、呼叫中心对话和市场调查等。当你查看一封电子邮件时,会有很大概率发现数据库中的下一封邮件与前一封邮件是极为不同的。对呼叫https://www.ituring.com.cn/book/tupubarticle/11854
4.非结构化的数据库51CTO博客已为您找到关于非结构化的数据库的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及非结构化的数据库问答内容。更多非结构化的数据库相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/feijiegouhuadeshujuku.html
5.非结构化数据提取技术在统计工作中的应用摘要结构化数据和非结构化数据是大数据的两种类型,目前非结构化数据信息已达信息总量的85%以上,且每年以55%~65%的速度增长,统计工作受到大数据的冲击,日常总会遇到一些非结构化数据提取的难题,导致工作量加大,效率低下。本文对非结构化数据及其提取技术、大数据处理语言——Python语言进行学习研究,解决实际中遇到https://tjj.changzhi.gov.cn/sjfx/202207/t20220704_2588893.html
6.蓝蓝高频面试之数据库系列第一期数据库基础20题结构化查询语言 (Structured Query Language) 简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 什么是MySQL? MySQL 是一个关系型数据库管理系统,MySQL 是最流行的关系型数据库管理系统之一,常见的关系型数据库还有 Oracle 、SQL Servhttps://m.nowcoder.com/discuss/353158849412669440
7.结构化数据和非结构化数据的例子可能是文本文件、电流新箱、图片、音频和视瓶文件、社交媒体文章等内容, 非结构化数据的例子包括客户对调查的反馈、社交媒体和产品审查。 与结构化数据相比,非结构化数据更能分析,因为它的组织不整齐。 但是,由于诸如自然语言处理和机器学习等新技术,我们现在可以从无结构的数据中提取有用的信息。 我们可以使用情绪https://wenku.baidu.com/view/cc774aa53a68011ca300a6c30c2259010202f38c.html
8.推荐:处理非结构化数据的7个实例(附链接)本文作者根据个人过往工作经验,整理出了处理非结构化数据的7个实例,希望能对读者处理相关实际问题有所启发。 本文是作为数据科学博客松的一部分发表的。 介绍 我敢肯定,从事数据工作的人,不管数据量大小与否,都遇到过如下问题:数据不好,数据不一致,数据不干净,诸如此类。帮工作中鲜与数据打交道的人科普一下,根据https://blog.csdn.net/Tw6cy6uKyDea86Z/article/details/112255708
9.什么是文本挖掘?IBM半结构化数据:顾名思义,这些数据由结构化和非结构化数据格式混合而成。 虽然这种数据经过了一定的组织,但其结构不足以满足关系数据库的要求。 半结构化数据的例子包括 XML、JSON 和 HTML 文件。 由于世界上约 80% 的数据都属于非结构化格式(链接位于 ibm.com 外部),因此对于组织而言,文本挖掘是一种非常有价值https://www.ibm.com/cn-zh/topics/text-mining
10.结构化半结构化和非结构化数据都有哪些数据可以根据其格式和可访问性被分类为结构化数据、半结构化数据和非结构化数据。下面是每种数据类型的定义和一些例子: 结构化数据 结构化数据是指遵循固定格式的数据,通常存储在关系数据库中。这种数据类型易于搜索和组织,因为它遵循一定的模式(如表格),每个数据项都有明确的字段。 https://www.jianshu.com/p/7018b1bef624
11.大数据测试——完整的软件测试初学者指南腾讯云开发者社区大数据中的数据格式可以分为三类。它们是: 结构化数据 半结构化数据 非结构化数据 结构化数据 这指的是高度组织的数据。 它可以轻松地存储在任何关系数据库中。 这也意味着可以使用简单的查询轻松地检索/搜索它。 结构化数据的例子 下图描述了一个应用程序的数据模型。在这里可以看到表和表中相关的列。在这个例子https://cloud.tencent.com/developer/article/1620817
12.大数据的多样性和混杂性数据分析师Variety能做老二的最大底气来自于占大数据体量八成以上的非结构化数据。天知道这“八成”是怎么算出来的,但既然美林从98年就开始在企业数据市场这么说,十几年过去应该有增无减。 Variety从本义来说是指数据种类的多样性,我把数据质量的多样性即混杂性(舍恩伯格《大数据时代》中对messy的翻译正好是“混杂”)也放入https://www.cda.cn/view/2523.html