千家信息网

Apache Spark2.0的核心结构是什么

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍"Apache Spark2.0的核心结构是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Apache Spark2.0的核心结构是什么"
千家信息网最后更新 2025年01月24日Apache Spark2.0的核心结构是什么

这篇文章主要介绍"Apache Spark2.0的核心结构是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Apache Spark2.0的核心结构是什么"文章能帮助大家解决问题。

DataFrames, Datasets 以及 Spark SQL

在步骤3中,你已经了解到弹性分布式数据集(RDDs)--它们构成了Spark的核心数据抽象概念,是其他所有更高层次数据抽象和API、包括DataFrame和数据集的基础。

在Spark2.0,在RDDs之上的DataFrame和数据集形成了核心的高层和结构化的分布式数据抽象。DataFrame在Spark里被叫做数据列(data column),它们可以执行组织数据的计划,以及数据处理或者描述运算、发布查询。数据集更进一步,提供了一个严格的编译时类型的安全保障,所以特定类型的错误在编译时就会被发现,而不是在运行时。

凭借数据结构和数据类型,Spark可以理解你将如何进行描述运算,哪些指定类型的列或者特定名称的字段将会访问你的数据,以及你将使用哪些特定操作的作用域。然后,Spark将会通过Spark 2.0's Catalyst optimizer优化你的代码,通过Project Tungsten生成高效的字节代码。

DataFrame和数据集为多种高级编程语言提供了API,让你的代码更易读,以及支持高阶函数比如filter, sum, count, avg, min, max等等。不管你用Spark SQL还是Python、Java、Scala或者R来表达你的计算指令,底层的代码生成是完全一致的,因为所有的执行的计划都是通过同一Catalyst优化器。

例如,Scala的作用域专用代码或者它SQL里对应的相关查询会生成完全相同的代码。比如下方会有一个数据集Scala项目叫做Person,以及一个SQL表格"Person"。

// a dataset object Person with field names fname, lname, age, weight// access using object notationval seniorDS = peopleDS.filter(p=>p.age > 55)// a dataframe with structure with named columns fname, lname, age, weight// access using col name notationVal seniorDF = peopleDF.where(peopleDF("age") > 55)// equivalent Spark SQL codeval seniorDF = spark.sql("SELECT age from person where age > 35")

为什么Spark结构化数据很重要,为什么DataFrame、数据集、Spark SQL提供了一个高效的Spark编码方式,如果你希望了解这些,可以通过链接(https://youtu.be/1a4pgYzeFwE )的视频寻找答案。

##五、GraphFrame的图形处理

尽管Spark有一个通用的基于RDD的图形处理库GraphX,可以优化分布式计算以及支持图形算法,它仍有一些挑战--没有Java和Python API,基于低层的RDD API。由于这些问题,它不能通过Project Tungsten 和Catalyst Optimizer享受到最近引入的性能优化。

相比之下,基于DataFrame的图处理库GraphFrames解决了所有问题:它提供了一个类似于GraphX的库但是有着更高的层级,更易读和可读的API,支持Java, Scala 和Python;可以保存和下载图形;利用了Spark2.0的底层性能和查询的优化。此外,它集成了GraphX。这意味着你可以无缝地将图处理库GraphFrames转换成等效的GraphX表示。

在下图中,这些城市有各个机场代号,所有顶点可以表示成DataFrame的排;同样地,所有边也可以看做DataFrame的排,它们有着各自的名字和类型的列。总的来说,这些DataFrame的顶点和边构成了一个图处理库GraphFrames。

// create a Vertices DataFrameval vertices = spark.createDataFrame(List(("JFK", "New York", "NY"))).toDF("id", "city", "state")// create a Edges DataFrameval edges = spark.createDataFrame(List(("JFK", "SEA", 45, 1058923))).toDF("src", "dst", "delay", "tripID")// create a GraphFrame and use its APIsval airportGF = GraphFrame(vertices, edges)// filter all vertices from the GraphFrame with delays greater an 30 minsval delayDF = airportGF.edges.filter("delay > 30")// Using PageRank algorithm, determine the Airport ranking of importanceval pageRanksGF = airportGF.pageRank.resetProbability(0.15).maxIter(5).run()display(pageRanksGF.vertices.orderBy(desc("pagerank")))

使用GraphFrame可以表达三种强大的查询。首先是简单的SQL类型的关于点和边的查询,比如怎么样的路线可能会导致重大延迟。第二,图形类型查询,比如有多少顶点传入有多少边传出。第三,主题查询,通过提供一个结构化的模型或者路径的顶点和边,找到在图形中的数据集的模型。

此外,图处理库GraphFrames可以很轻松地支持GraphX所有图形算法。例如,使用PageRank找到所有重要的点,或者决定从起点到目的地的最短路径,或者执行一个广度优先搜索(BFS),或者为探索联络关系确定强联系的点。

在网络研讨会中(http://go.databricks.com/graphframes-dataframe-based-graphs-for-apache-spark )中,Spark的社区贡献者Joseph Bradley给大家介绍了使用图处理库GraphFrames进行图像处理的动机和易用性,以及基于DataFrame的API的好处。作为研讨会的一部分,你也将了解到使用图处理库GraphFrames的便捷,以及上述所有类型的查询和算法。

Apache Spark 2.0和许多Spark的组件,包括机器学习MLlib和Streaming,因为性能提升、易用性和高层次的抽象及结构,越来越倾向于提供等效的DataFrame API。在必要或者适合的用例中,你可以选择使用图处理库GraphFrames来代替GraphX。下图是一个GraphX和图处理库GraphFrames之间简洁的总结和比较。

图处理库GraphFrames必会发展得越来越快。新版本的GraphFrame将作为Spark的一个包和Spark2.0兼容。

关于"Apache Spark2.0的核心结构是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

数据 处理 结构 类型 查询 图形 代码 核心 顶点 支持 分布式 性能 知识 算法 问题 高层 生成 结构化 重要 作用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 局域网络技术的三要素是什么 软件开发设计作品 南邮网络安全大赛 数据库删除基本表用什么语句 南京和杭州哪个软件开发 java数据库并发处理 网络安全技术与应用入侵检测 以公司电脑作为代理服务器 超级人类那个服务器 服务器自己怎么弄 安装软件连接服务器失败 目前云数据库 计算机网络技术王相林试卷 启明星辰中国网络安全年会 网络安全等级测评机构服务认证 北京中易银合 猪软件开发 服务器在香港安全吗 华为服务器机柜怎么拆 数据库删除一条wincc消息 软件开发类办公室 泸州移动网络技术员 数据库为什么不由国家出钱卖 成都软件开发技术专修学校专业 财务软件开发论坛 电厂常见网络安全威胁有哪些 学过数据库之后的体会 知识库 人才库 数据库 海淀区加工软件开发经历 怪物工程师为什么无法连接服务器 公司用的网络安全设备
0