快速启动
本教程提供了简要介绍如何使用火花。我们将首先介绍API通过火花的交互式shell(在Python或Scala),然后展示如何用Java编写应用程序,Scala和Python。
要跟随本指南,首先下载一个打包发布的火花<一个href="//www.leiyimei360.com/downloads.html">火花的网站一个>。因为我们不会使用HDFS,您可以下载一个包Hadoop的任何版本。
注意,之前2.0火花,火花的主要编程接口是弹性分布式数据集(抽样)。2.0火花后,抽样数据集所取代,这是强类型的抽样,但丰富的优化。抽样界面仍然支持,你可以得到一个更详细的参考<一个href="//www.leiyimei360.com/docs/latest/rdd-programming-guide.html">抽样编程指南一个>。然而,我们强烈建议您切换到使用数据集,比抽样具有更好的性能。看到<一个href="//www.leiyimei360.com/docs/latest/sql-programming-guide.html">SQL编程指南一个>数据集的更多信息。
交互式分析引发壳
基础知识
火花的shell学习API提供了一个简单的方法,以及一个强大的工具来分析数据交互。也可在Scala(运行在Java VM,因此使用现有的Java库的一个好方法)或Python。启动它通过运行以下火花目录:
火花的主要抽象是一个分布式称为数据集的项的集合。可以创建数据集来自Hadoop InputFormats(如HDFS文件)或通过改造其他数据集。让我们做一个新的文本数据集的火花源目录的README文件:
您可以直接从数据集获取值,通过调用一些动作,或者改变一个新的数据集。有关详细信息,请阅读API文档一个>。
现在,让我们将这个数据集转换成一个新的。我们称之为过滤器
返回一个新的数据集文件中的条目的一个子集。
我们可以一起链转换和行动:
或者如果PySpark皮普在当前安装环境:
火花的主要抽象是一个分布式称为数据集的项的集合。可以创建数据集来自Hadoop InputFormats(如HDFS文件)或通过改造其他数据集。由于Python的动态特性,我们不需要在Python中强类型数据集。结果,所有数据集在Python数据集(行),我们叫它DataFrame
与数据帧的概念是一致的熊猫和r .让我们新建一个文本的DataFrame火花源目录的README文件:
您可以直接从DataFrame得到值,通过调用一些动作,或者变换DataFrame来获得一个新的。有关详细信息,请阅读API文档一个>。
现在让我们改变这个DataFrame一个新的。我们称之为过滤器
返回一个新的DataFrame行文件的一个子集。
我们可以一起链转换和行动:
更多的数据操作
数据集可以用于更复杂的操作和转换计算。假设我们想要找到最多的一行字:
第一行映射到一个整数价值,创建一个新的数据集。减少
被称为数据集上找到最大的单词计数。的参数地图
和减少
Scala函数字面量(关闭),可以使用任何语言特性或Scala / Java库。例如,我们可以很容易地调用函数声明。我们将使用Math.max ()
函数来让代码更容易理解:
一个常见的数据流模式是MapReduce, Hadoop的推广。火花很容易实现MapReduce流:
在这里,我们调用flatMap
将一个数据集的行数据集的话,然后结合groupByKey
和数
计算每一项的文件作为数据集(字符串,长)对。收集单词统计在我们的外壳,我们可以打电话收集
:
第一行映射到一个整数值,别名“numWords”,创建一个新的DataFrame。gg
是呼吁DataFrame找到最大的单词计数。的参数选择
和gg
都是列一个>,我们可以用df.colName
从DataFrame列。我们也可以导入pyspark.sql。功能,它提供了很多方便的函数来建立一个新的列从一个旧的。
一个常见的数据流模式是MapReduce, Hadoop的推广。火花很容易实现MapReduce流:
这里,我们使用爆炸
函数选择
,将一个数据集的行数据集的话,然后结合groupBy
和数
计算每一项的文件作为DataFrame 2列:“词”和“数”。收集单词统计在我们的外壳,我们可以打电话收集
:
缓存
火花还支持将数据集到一个集群范围的内存缓存。反复访问数据时,这是非常有用的,例如当查询一个小“热”数据集或运行时像PageRank迭代算法。作为一个简单的例子,让我们纪念linesWithSpark
数据缓存:
看起来愚蠢的使用引发探索和缓存100行文本文件。有趣的部分是,这些相同的函数可以用于非常大的数据集,即使他们跨越几十或几百个节点。你也可以交互地通过连接bin / spark-shell
到一个集群,如所描述的<一个href="//www.leiyimei360.com/docs/latest/rdd-programming-guide.html">抽样编程指南一个>。
看起来愚蠢的使用引发探索和缓存100行文本文件。有趣的部分是,这些相同的函数可以用于非常大的数据集,即使他们跨越几十或几百个节点。你也可以交互地通过连接bin / pyspark
到一个集群,如所描述的<一个href="//www.leiyimei360.com/docs/latest/rdd-programming-guide.html">抽样编程指南一个>。
独立的应用程序
假设我们希望编写一个自包含的应用程序使用火花API。我们将走在Scala中的一个简单的应用程序(sbt), Java (Maven)和Python (pip)。
我们将创建一个非常简单的火花在Scala-so应用简单,事实上,它的命名SimpleApp.scala
:
注意,应用程序应该定义一个main ()
方法,而不是扩展scala.App
。的子类scala.App
可能不会正常工作。
这个程序只是数量的行数包含“a”,包含“b”火花README。请注意,你需要替换YOUR_SPARK_HOME火花的位置安装。与前面的例子引发壳,初始化自己的SparkSession,我们初始化一个SparkSession作为该计划的一部分。
我们称之为SparkSession.builder
构建一个SparkSession
,然后设置应用程序名称,最后调用getOrCreate
得到SparkSession
实例。
我们的应用程序依赖于火花API,所以我们还将包括一个sbt配置文件,build.sbt
,这解释了火花是依赖。这个文件还添加了一个存储库,火花取决于:
sbt正常工作,我们需要布局SimpleApp.scala
和build.sbt
根据典型的目录结构。一旦到位,我们可以创建一个JAR包包含应用程序的代码,然后使用spark-submit
脚本运行我们的程序。
这个例子将使用Maven来编译应用程序JAR,但任何类似的构建系统。
我们将创建一个非常简单的火花的应用程序,SimpleApp.java
:
这个程序只是数量的行数包含“a”,包含“b”火花README。请注意,你需要替换YOUR_SPARK_HOME火花的位置安装。与前面的例子引发壳,初始化自己的SparkSession,我们初始化一个SparkSession作为该计划的一部分。
建立程序,我们也写一个Mavenpom.xml
文件列表作为附件的火花。注意,火花工件与Scala版本标记。
我们把这些文件根据规范化Maven目录结构:
现在,我们可以使用Maven和打包应用程序执行它/ bin / spark-submit
。
现在,我们将展示如何编写一个应用程序使用Python API (PySpark)。
如果您正在构建一个打包PySpark应用程序或库可以将它添加到您的设置。py文件:
作为一个例子,我们将创建一个简单的火花应用程序,SimpleApp.py
:
这个程序只是数量的行数包含“a”和包含“b”的数量在一个文本文件中。请注意,你需要替换YOUR_SPARK_HOME火花的位置安装。与Scala和Java示例中,我们使用一个SparkSession创建数据集。使用定制类的应用程序或第三方库,我们也可以添加代码依赖项spark-submit
通过其——py-files
参数被打包成一个zip文件(请参阅spark-submit——帮助
详情)。SimpleApp
很简单,我们不需要指定任何代码依赖项。
我们可以运行这个应用程序使用bin / spark-submit
脚本:
如果你有PySpark pip安装到您的环境(例如,pip安装pyspark
),你可以用常规的Python解释器运行您的应用程序或使用所提供的“spark-submit”作为你喜欢。
其他依赖项管理工具如Conda和皮普也可以用于自定义类或第三方库。另请参阅<一个href="//www.leiyimei360.com/docs/latest/api/python/user_guide/python_packaging.html">Python包管理一个>。
从这里去哪里
祝贺你运行应用程序第一个火花!
- 为深入API的概述,从<一个href="//www.leiyimei360.com/docs/latest/rdd-programming-guide.html">抽样编程指南一个>和<一个href="//www.leiyimei360.com/docs/latest/sql-programming-guide.html">SQL编程指南一个>或看到“编程指南”菜单其他组件。
- 集群上运行应用程序,头<一个href="//www.leiyimei360.com/docs/latest/cluster-overview.html">部署概述一个>。
- 最后,引发包括几个样品
例子
目录(<一个href="https://github.com/apache/spark/tree/master/examples/src/main/scala/org/apache/spark/examples">Scala一个>,<一个href="https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples">Java一个>,<一个href="https://github.com/apache/spark/tree/master/examples/src/main/python">Python一个>,<一个href="https://github.com/apache/spark/tree/master/examples/src/main/r">R一个>)。您可以运行如下: