基于Spark分布式的栅格代数运算方法、系统及设备与流程

未命名 07-23 阅读:223 评论:0

基于spark分布式的栅格代数运算方法、系统及设备
技术领域
1.本发明涉及空间数据处理技术领域,具体涉及一种基于spark分布式的栅格代数运算方法、系统及设备。


背景技术:

2.栅格数据是一种常见的地理空间数据类型,它将地表划分为规则的网格单元,并为每个单元赋予一个数值,表示该单元对应的地理属性或现象。栅格数据计算是指对多个栅格数据进行数学运算或统计分析,以得到新的栅格数据或结果。栅格数据计算在地理信息系统、遥感、气象、水文等领域有着广泛的应用。
3.目前,常用的栅格数据计算方法有以下几种:
4.(1)基于本地文件系统的计算方法:该方法将多个栅格数据文件存储在本地磁盘中,并通过专业软件或编程语言进行读取和计算。
5.(2)基于hadoop(一个由apache基金会所开发的分布式系统基础架构)分布式文件系统(hadoop distributed file system,hdfs)的方法:该方法将多个栅格数据文件存储在hdfs中,并通过mapreduce(一种编程模型,用于大规模数据集的并行运算)框架进行分布式计算。该方法可以利用集群资源进行大规模的栅格数据计算任务,但是由于mapreduce框架存在较高的启动开销、不支持迭代和交互式计算等缺点,导致其性能和效率不高。
6.针对上述相关技术,发明人认为上述第(1)种方法适用于小规模的栅格数据计算任务,当处理大规模或高分辨率的栅格数据时,会遇到内存不足、读写速度慢和并行处理能力低等问题;上述第(2)种方法性能和效率不高:因为mapreduce框架存在较高的启动开销和网络传输开销、不支持迭代式和交互式计算、缺乏内存管理机制,并且需要编写复杂的map(映射)和reduce(归约)函数。


技术实现要素:

7.为了解决现有技术中的上述问题,本发明提出了一种基于spark分布式的栅格代数运算方法、系统及设备,提高了计算效率。
8.本发明的一方面,提出一种基于spark分布式的栅格代数运算方法,所述方法包括:
9.基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一rdd(resilient distributed datasets,弹性分布式数据集);
10.对所有的所述第一rdd进行压缩,得到第二rdd;
11.获取用户输入的表达式,并解析为运算符和函数,进而生成计算器类;
12.根据所述计算器类,利用spark对所述第二rdd进行分布式并行计算,生成第三rdd;
13.对所述第三rdd进行反序列化并输出至栅格文件。
14.优选地,“基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据
并序列化为多个第一rdd”的步骤包括:
15.利用spark分布式技术从多个输入文件中并行地读取栅格数据,同时在读取过程中将每个栅格数据分割为多个瓦片并序列化,得到与所述输入文件一一对应的第一rdd;
16.将所有的所述第一rdd按顺序存入第一数组;
17.将所有的所述输入文件的别名按顺序存入第二数组;
18.提取所有的所述第一rdd中的栅格数据类型并进行合并,得到最终输出的数据类型;
19.其中,
20.所述第一rdd为自定义的tilerdd;
21.所述第一rdd的每行(row)中包括一个瓦片(tile)和一个表示该瓦片位置的索引,且每个瓦片为一个多维数组。
22.优选地,“对所有的所述第一rdd进行压缩,得到第二rdd”的步骤包括:
23.利用spark的zip函数,按顺序遍历所述第一数组中的每个所述第一rdd并进行压缩,从而生成第二rdd;
24.其中,所述第二rdd中的每行包括一个瓦片数组和一个表示该瓦片数组中各瓦片位置的索引数组。
25.优选地,所述计算器类包括:运算表达式、解析后的运算符和函数,以及执行函数;
26.所述运算表达式是将所述用户输入的表达式中参与运算的栅格数据替换为所述输入文件的别名从而得到;
27.解析后的函数包括自定义函数;
28.所述执行函数用于执行所述运算表达式;
[0029]“根据所述计算器类,利用spark对所述第二rdd进行分布式并行计算,生成第三rdd”的步骤包括:
[0030]
对所述计算器类进行序列化;
[0031]
利用spark中的map函数对所述第二rdd中的每行数据运行所述执行函数,向所述执行函数传入所述运算表达式、所述第一数组和所述第二数组,并将运算后的瓦片数据类型转换为所述最终输出的数据类型,从而生成第三rdd;
[0032]
其中,
[0033]
所述第三rdd的每行中包括一个瓦片和一个表示该瓦片位置的索引。
[0034]
优选地,“提取所有的所述第一rdd中的栅格数据类型并进行合并,得到最终输出的数据类型”的步骤包括:
[0035]
提取所有的所述第一rdd中的栅格数据类型;
[0036]
从提取的所述栅格数据类型中选择取值范围最大的类型,作为所述最终输出的数据类型。
[0037]
优选地,“对所述第三rdd进行反序列化并输出至栅格文件”的步骤包括:
[0038]
对所述第三rdd进行反序列化并利用spark并行技术将栅格数据写出至本地或hdfs栅格文件中。
[0039]
可选地,用pyspark(基于python语言开发的spark接口库)替换spark进行分布式的栅格代数运算。
[0040]
本发明的第二方面,提出一种基于spark分布式的栅格代数运算系统,所述系统包括:
[0041]
读取模块,用于基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一rdd;
[0042]
压缩模块,用于对所有的所述第一rdd进行压缩,得到第二rdd;
[0043]
计算器类生成模块,用于获取用户输入的表达式,并解析为运算符和函数,进而生成计算器类;
[0044]
计算模块,用于根据所述计算器类,利用spark对所述第二rdd进行分布式并行计算,生成第三rdd;
[0045]
反序列化及输出模块,用于对所述第三rdd进行反序列化,并输出至栅格文件。
[0046]
本发明的第三方面,提出一种处理设备,包括存储器和处理器,所述存储器上存储有能够被所述处理器加载并执行上面所述方法的计算机程序。
[0047]
本发明的第四方面,提出一种存储设备,存储有能够被处理器加载并执行上面所述方法的计算机程序。
[0048]
本发明具有如下有益效果:
[0049]
本发明利用spark并行技术分块读取多个栅格数据,并将其转换为第一rdd(自定义tilerdd格式),以便进行高效地分布式处理;将多个第一rdd压缩为一个第二rdd,并保留每个瓦片对应的索引,以便进行有序的计算;自定义计算器类,并将其序列化,以便在分布式环境中传输和执行;根据用户输入的表达式,解析运算符和函数,以便进行灵活和通用的计算。
[0050]
本发明相比于基于本地文件系统的计算方法,本技术方案可以有效处理大规模或高分辨率的栅格数据;相比于基于hdfs和mapreduce框架的方法,本技术方案可以利用spark框架的高性能和低开销特性,提高计算效率和速度,减少开销和提高效率,同时支持迭代式和交互式计算。
[0051]
本发明充分利用了spark框架的优势,实现对多个栅格数据进行高效、灵活和通用的计算,并支持多种输入和输出格式。可以对多个相同范围相同像元大小的栅格数据进行单机或多机分布式并行栅格代数运算。
附图说明
[0052]
图1是本发明的基于spark分布式的栅格代数运算方法的实施例;
[0053]
图2是本发明的基于spark分布式的栅格代数运算系统的实施例。
具体实施方式
[0054]
下面参照附图来描述本发明的优选实施方式。本领域技术人员应当理解的是,这些实施方式仅用于解释本发明的技术原理,并非旨在限制本发明的保护范围。
[0055]
为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本技术的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0056]
需要说明的是,在本发明的描述中,术语“第一”、“第二”仅仅是为了便于描述,而不是指示或暗示所述装置、元件或参数的相对重要性,因此不能理解为对本发明的限制。另外,本发明中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
[0057]
图1是本发明的基于spark分布式的栅格代数运算方法的实施例。如图1所示,本实施例的代数运算方法包括步骤s10-s50:
[0058]
步骤s10,基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一rdd。该步骤可以具体包括步骤s11-s14:
[0059]
步骤s11,利用spark分布式技术从多个输入文件(如tif格式)中并行地读取栅格数据,同时在读取过程中将每个栅格数据分割为多个瓦片并序列化,得到与输入文件一一对应的第一rdd。
[0060]
步骤s12,将所有的第一rdd按顺序存入第一数组。
[0061]
步骤s13,将所有的输入文件的别名按顺序存入第二数组。
[0062]
步骤s14,提取所有的第一rdd中的栅格数据类型并进行合并,得到最终输出的数据类型。该步骤又可以进一步包括步骤(1)-(2):
[0063]
(1)提取所有的第一rdd中的栅格数据类型。
[0064]
(2)从提取的栅格数据类型中选择取值范围最大的类型,作为最终输出的数据类型。
[0065]
例如,将int类型与float类型合并,将生成float类型。
[0066]
其中,第一rdd为自定义的tilerdd;第一rdd的每行(row)中包括一个瓦片(tile)和一个表示该瓦片位置的索引,且每个瓦片为一个多维数组。
[0067]
步骤s20,对所有的第一rdd进行压缩,得到第二rdd。
[0068]
具体地,利用spark的zip函数,按顺序遍历第一数组中的每个第一rdd并进行压缩,从而生成第二rdd。
[0069]
其中,第二rdd中的每行包括一个瓦片数组和一个表示该瓦片数组中各瓦片位置的索引数组。
[0070]
步骤s30,获取用户输入的表达式,并解析为运算符和函数,进而生成计算器类。
[0071]
其中,计算器类包括:运算表达式、解析后的运算符和函数,以及执行函数;运算表达式是将用户输入的表达式中参与运算的栅格数据替换为输入文件的别名从而得到;执行函数用于执行运算表达式;解析后的函数包括自定义函数。本实施例中,除了常见函数外,还提供了一些自定义的函数,如max、min、mean等,用于对tile数组中的多个tile进行统计分析。
[0072]
步骤s40,根据计算器类,利用spark对第二rdd进行分布式并行计算,生成第三rdd。该步骤可以具体包括步骤s41-s42:
[0073]
步骤s41,对计算器类进行序列化。
[0074]
步骤s42,利用spark中的map函数对第二rdd中的每行数据运行执行函数,向执行函数传入运算表达式、第一数组和第二数组,并将运算后的瓦片数据类型转换为最终输出的数据类型,从而生成第三rdd。
[0075]
其中,第三rdd的每行中包括一个瓦片和一个表示该瓦片位置的索引。
[0076]
步骤s50,对第三rdd进行反序列化并输出至栅格文件。
[0077]
具体地,对第三rdd进行反序列化并利用spark并行技术将栅格数据写出至本地或hdfs栅格文件中。
[0078]
上述实施例中提到的spark用scala语言编写,在一种可选的实施例中,也可以用pyspark替换spark进行分布式的栅格代数运算。pyspark是一个基于python语言开发的spark接口库,它提供了一套针对大规模数据处理功能。pyspark可以利用spark并行技术对hdfs中存储的栅格数据进行分布式处理。该方法可以使用python语言编写计算逻辑,提高了通用性和可扩展性。
[0079]
上述实施例中虽然将各个步骤按照上述先后次序的方式进行了描述,但是本领域技术人员可以理解,为了实现本实施例的效果,不同的步骤之间不必按照这样的次序执行,其可以同时(并行)执行或以颠倒的次序执行,这些简单的变化都在本发明的保护范围之内。
[0080]
基于与方法实施例相同的技术构思,本技术还提供了栅格代数运算系统的实施例,下面进行具体说明。
[0081]
图2是本发明的基于spark分布式的栅格代数运算系统的实施例。如图2所示,本实施例的系统包括:读取模块10、压缩模块20、计算器类生成模块30、计算模块40、以及反序列化及输出模块50。
[0082]
其中,读取模块10用于基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一rdd;压缩模块20用于对所有的第一rdd进行压缩,得到第二rdd;计算器类生成模块30用于获取用户输入的表达式,并解析为运算符和函数,进而生成计算器类;计算模块40,用于根据计算器类,利用spark对第二rdd进行分布式并行计算,生成第三rdd;反序列化及输出模块,用于对第三rdd进行反序列化,并输出至栅格文件。
[0083]
进一步地,本发明还提供了一种处理设备的实施例。本实施例的处理设备包括存储器和处理器,所述存储器上存储有能够被所述处理器加载并执行上面所述方法的计算机程序。
[0084]
更进一步地,本发明还提供了一种存储设备,本实施例的存储设备中存储有能够被处理器加载并执行上面所述方法的计算机程序。
[0085]
所述存储设备可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0086]
本领域技术人员应该能够意识到,结合本文中所公开的实施例描述的各示例的方法步骤和模块,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明电子硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以电子硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0087]
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案。但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本
发明的原理的前提下,本领域技术人员可以对相关技术特征做出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。

技术特征:
1.一种基于spark分布式的栅格代数运算方法,其特征在于,所述方法包括:基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一rdd;对所有的所述第一rdd进行压缩,得到第二rdd;获取用户输入的表达式,并解析为运算符和函数,进而生成计算器类;根据所述计算器类,利用spark对所述第二rdd进行分布式并行计算,生成第三rdd;对所述第三rdd进行反序列化并输出至栅格文件。2.根据权利要求1所述的基于spark分布式的栅格代数运算方法,其特征在于,“基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一rdd”的步骤包括:利用spark分布式技术从多个输入文件中并行地读取栅格数据,同时在读取过程中将每个栅格数据分割为多个瓦片并序列化,得到与所述输入文件一一对应的第一rdd;将所有的所述第一rdd按顺序存入第一数组;将所有的所述输入文件的别名按顺序存入第二数组;提取所有的所述第一rdd中的栅格数据类型并进行合并,得到最终输出的数据类型;其中,所述第一rdd为自定义的tilerdd;所述第一rdd的每行中包括一个瓦片和一个表示该瓦片位置的索引,且每个瓦片为一个多维数组。3.根据权利要求2所述的基于spark分布式的栅格代数运算方法,其特征在于,“对所有的所述第一rdd进行压缩,得到第二rdd”的步骤包括:利用spark的zip函数,按顺序遍历所述第一数组中的每个所述第一rdd并进行压缩,从而生成第二rdd;其中,所述第二rdd中的每行包括一个瓦片数组和一个表示该瓦片数组中各瓦片位置的索引数组。4.根据权利要求3所述的基于spark分布式的栅格代数运算方法,其特征在于,所述计算器类包括:运算表达式、解析后的运算符和函数,以及执行函数;所述运算表达式是将所述用户输入的表达式中参与运算的栅格数据替换为所述输入文件的别名从而得到;解析后的函数包括自定义函数;所述执行函数用于执行所述运算表达式;“根据所述计算器类,利用spark对所述第二rdd进行分布式并行计算,生成第三rdd”的步骤包括:对所述计算器类进行序列化;利用spark中的map函数对所述第二rdd中的每行数据运行所述执行函数,向所述执行函数传入所述运算表达式、所述第一数组和所述第二数组,并将运算后的瓦片数据类型转换为所述最终输出的数据类型,从而生成第三rdd;其中,所述第三rdd的每行中包括一个瓦片和一个表示该瓦片位置的索引。
5.根据权利要求2所述的基于spark分布式的栅格代数运算方法,其特征在于,“提取所有的所述第一rdd中的栅格数据类型并进行合并,得到最终输出的数据类型”的步骤包括:提取所有的所述第一rdd中的栅格数据类型;从提取的所述栅格数据类型中选择取值范围最大的类型,作为所述最终输出的数据类型。6.根据权利要求1所述的基于spark分布式的栅格代数运算方法,其特征在于,“对所述第三rdd进行反序列化并输出至栅格文件”的步骤包括:对所述第三rdd进行反序列化并利用spark并行技术将栅格数据写出至本地或hdfs栅格文件中。7.根据权利要求1-6中任一项所述的基于spark分布式的栅格代数运算方法,其特征在于,用pyspark替换spark进行分布式的栅格代数运算。8.一种基于spark分布式的栅格代数运算系统,其特征在于,所述系统包括:读取模块,用于基于spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一rdd;压缩模块,用于对所有的所述第一rdd进行压缩,得到第二rdd;计算器类生成模块,用于获取用户输入的表达式,并解析为运算符和函数,进而生成计算器类;计算模块,用于根据所述计算器类,利用spark对所述第二rdd进行分布式并行计算,生成第三rdd;反序列化及输出模块,用于对所述第三rdd进行反序列化,并输出至栅格文件。9.一种处理设备,其特征在于,包括存储器和处理器,所述存储器上存储有能够被所述处理器加载并执行如权利要求1-7中任一项所述方法的计算机程序。10.一种存储设备,其特征在于,存储有能够被处理器加载并执行如权利要求1-7中任一项所述方法的计算机程序。

技术总结
本发明涉及空间数据处理技术领域,具体涉及一种基于Spark分布式的栅格代数运算方法、系统及设备,旨在提高计算效率。本发明的基于Spark分布式的栅格代数运算方法包括:基于Spark并行技术分块读取多个空间范围和像元大小相同的栅格数据并序列化为多个第一RDD;对所有的第一RDD进行压缩,得到第二RDD;获取用户输入的表达式,并解析为运算符和函数,进而生成计算器类;根据计算器类,利用Spark对第二RDD进行分布式并行计算,生成第三RDD;对第三RDD进行反序列化并输出至栅格文件。本发明充分利用了Spark框架的优势,实现对多个栅格数据进行高效、灵活和通用的计算,并支持多种输入和输出格式。入和输出格式。入和输出格式。


技术研发人员:丁双龙 沙志友 刘春影 李超
受保护的技术使用者:易智瑞信息技术有限公司
技术研发日:2023.05.04
技术公布日:2023/7/22
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐