全方位掌握 Apache Spark 2.0 七步走(二) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
dataman
V2EX    云计算

全方位掌握 Apache Spark 2.0 七步走(二)

  •  
  •   dataman 2016 年 10 月 11 日 1982 次点击
    这是一个创建于 3393 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在上一篇普及过Spark的相关概念之后,让我们继续深入研究它的核心结构以及好用的 API ,本篇视频内容丰富,机( fan )智( qiang )的小伙伴不容错过。

    前篇传送门:全方位掌握 Apache Spark 2.0 七步走(一)

    三、 Apache Spark 的核心结构

    为了更好地理解 Spark 的各个组件是如何交互的,在细节上抓住 Spark 的核心结构是很有必要的。所有关键词和概念在解释后才会变得生动形象,这篇 Spark Summit 大会上的培训视频对于你更快开启 Spark 之旅很有帮助:

    视频链接: https://youtu.be/7ooZ4S7Ay6Y

    四、 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 notation val seniorDS = peopleDS.filter(p=>p.age > 55) // a dataframe with structure with named columns fname, lname, age, weight // access using col name notation Val seniorDF = peopleDF.where(peopleDF("age") > 55) // equivalent Spark SQL code val 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 DataFrame val vertices = spark.createDataFrame(List(("JFK", "New York", "NY"))).toDF("id", "city", "state") // create a Edges DataFrame val edges = spark.createDataFrame(List(("JFK", "SEA", 45, 1058923))).toDF("src", "dst", "delay", "tripID") // create a GraphFrame and use its APIs val airportGF = GraphFrame(vertices, edges) // filter all vertices from the GraphFrame with delays greater an 30 mins val delayDF = airportGF.edges.filter("delay > 30") // Using PageRank algorithm, determine the Airport ranking of importance val 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 兼容。

    作者: Jules S. Damji & Sameer Farooqui, Databricks. 文章来源: http://www.kdnuggets.com/2016/09/7-steps-mastering-apache-spark.html

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2608 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:11 PVG 19:11 LAX 03:11 JFK 06:11
    Do have faith n what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86