原地址:http://spark.apache.org/docs/latest/quick-start.html

  这篇指导对使用Spark提供了一个快速的介绍。我们首先介绍API,通过spark交互式shell(Python或Scala)。然后如何在JAVA、scala、python上写应用程序。

  跟随这篇指导,首先从spark网站上下载一个release。因为我们不使用HDFS,你可以下载任何版本的hadoop。

  注意:在spark2.0之前,主要的编程界面是RDD。在spark2.0之后,RDD被Dataset取代。Dataset很像RDD,但是会有更多的优化,RDD的接口依旧智齿,并且你能够在《RDD编程指导》得到一个更完整的引用。然而,我们非常推荐你使用DataSet,会比RDD有更好的表现。看《SQL编程指导》得到更多关于Dateset的指导。

  spark Shell 的交互分析:

  基础:

  spark shell 提供了一个简单的方式去学习API,同样也是一个非常强大的交互式Dataset分析工具。可以应用在scala(运行与JAVA VM,可以使用现有的JAVA库)、python。在spark目录下运行下面代码开启spark

./bin/spark-shell

  spark首要概念是分布式items收集。Dataset能够从Hadoop输入格式(HDFS)上创建,或者从其他Dataset转化。让我们从spark源文件目录中的README文件中做一个新的Dataset。

scala> val textFile = spark.read.textFile("README.md")
textFile: org.apache.spark.sql.Dataset[String] = [value: string]

  你可以直接从Dataset中获取值,通过使用一些action,或转化dataset为一个新的。详细请读《API doc》。

scala> textFile.count() // Number of items in this Dataset
res0: Long = 126 // May be different from yours as README.md will change over time, similar to other outputs scala> textFile.first() // First item in this Dataset
res1: String = # Apache Spark

  现在让我们把这个Dataset转化为一个新的。我们用filter返回一个新的Dataset(新的Dataset是原文件条目的子集)

scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark: org.apache.spark.sql.Dataset[String] = [value: string]

  我们可以连接转化(transformation)和行动(actions)

scala> textFile.filter(line => line.contains("Spark")).count() // How many lines contain "Spark"?
res3: Long = 15

  更多的dataset操作

  Dataset的action和transformtion可以用来做更复杂的计算任务。找出单词数最多的那一行:

scala> textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
res4: Long = 15

  第一个map是得到一个整数,创建一个新的Dataset,reduce用来找最大的单词数。他们的参数是scala函数,你可以使用scala,java。例如,我们可以在任何地方简单地公开调用函数。我们使用Math.max函数让这段胆码更容易理解。

scala> import java.lang.Math
import java.lang.Math scala> textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))
res5: Int = 15

  一个常见的数据流模式叫做MapReduce,因Hadoop而普及。spark可以很简单地继承MapReduce:

scala> val wordCounts = textFile.flatMap(line => line.split(" ")).groupByKey(identity).count()
wordCounts: org.apache.spark.sql.Dataset[(String, Long)] = [value: string, count(1): bigint]

  在这里,我们调用flatmap图转化一个行Dataset为一个单词Dataset,然后结合groupByKey和count去计算每个单词在文件中出现的次数,使用pair。收集单词数,使用:

scala> wordCounts.collect()
res6: Array[(String, Int)] = Array((means,1), (under,2), (this,3), (Because,1), (Python,2), (agree,1), (cluster.,1), ...)

  

  缓冲:

  spark同样支持把数据放在集群内存的缓存里,当数据重复被存取的时候这非常有用,比如查询一个很火的dataset,或者跑一些迭代算法(PageRank等)。举一个简单例子,我们把linesWithSpark 放进缓存。

scala> linesWithSpark.cache()
res7: linesWithSpark.type = [value: string] scala> linesWithSpark.count()
res8: Long = 15 scala> linesWithSpark.count()
res9: Long = 15

  用spark浏览和缓存100行的文本看起来很愚蠢,有趣的是这些相同的函数被使用在一个非常大的数据集,甚至跨越数十数百个节点。你同样跨越使用 bin/spark-shell 连接集群,正如RDD编程中的描述。

  独立程序:

  假设我们希望用sparkAPI写一个独立程序,我们将通过一个简单的程序java(Maven)

  这个例子将使用Maven去编译一个应用jar,任何类似的build系统也都能工作。

  我们将创建一个非常简单的spark应用。SimpleApp.java

/* SimpleApp.java */
import org.apache.spark.sql.SparkSession; public class SimpleApp {
public static void main(String[] args) {
String logFile = "YOUR_SPARK_HOME/README.md"; // Should be some file on your system
SparkSession spark = SparkSession.builder().appName("Simple Application").getOrCreate();
Dataset<String> logData = spark.read.textFile(logFile).cache(); long numAs = logData.filter(s -> s.contains("a")).count();
long numBs = logData.filter(s -> s.contains("b")).count(); System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs); spark.stop();
}
}

  这个程序只是计算了包含‘a’的行的数量和包含‘b’的行的数量,在Spark的README中。注意你需要替换YOURS_SPARK_HOME为你本地spark安装的地方。不像前面spark-shell的例子(初始化自己SparkSession),我们初始化一个SparkSession作为程序的一部分。

  去build这个程序,我们也需要写一个Maven-pom.xml文件列出spark是一个依赖。注意spark要人工标出scala的版本。

<project>
<groupId>edu.berkeley</groupId>
<artifactId>simple-project</artifactId>
<modelVersion>4.0.0</modelVersion>
<name>Simple Project</name>
<packaging>jar</packaging>
<version>1.0</version>
<dependencies>
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
</project>

  我们通过标准的Maven目录结构来展示这些文件

$ find .
./pom.xml
./src
./src/main
./src/main/java
./src/main/java/SimpleApp.java

  下一步:

  祝贺你运行了第一个你的spark应用

  --一个深入的API概述,请开始《RDD编程指导》和《SQL编程指导》,或者看其他部分“编程指导”菜单。

  --在集群上跑程序,请看《部署概述》

  --最后,spark包含了一些样例在example目录下(scala,java,python,R),你可以这样运行他们

# For Scala and Java, use run-example:
./bin/run-example SparkPi

Spark 2.2.0 文档中文版 Quick Start的更多相关文章

  1. vue mand-mobile按2.0文档默认安装的是1.6.8版本

    vue mand-mobile按2.0文档默认安装的是1.6.8版本 npm list mand-mobilebigbullmobile@1.0.0 E:\webcode\bigbullmobile` ...

  2. JAVA - JDK 1.8 API 帮助文档-中文版

    JAVA - JDK 1.8 API 帮助文档-中文版 百度云链接: https://pan.baidu.com/s/1_7FFadw1a6J0qTfx2FzqPQ 密码: 41n4

  3. Beautiful Soup 4.2.0 文档

    Beautiful Soup 4.2.0 文档 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方 ...

  4. css2.0文档查阅及字体样式

    css2.0文档查阅下载     网址:http://soft.hao123.com/soft/appid/9517.html <html xmlns="http://www.w3.o ...

  5. “全能”选手—Django 1.10文档中文版Part4

    第一部分传送门 第二部分传送门 第三部分传送门 3.2 模型和数据库Models and databases 3.2.2 查询操作making queries 3.3.8 会话sessions 2.1 ...

  6. Django 1.10文档中文版Part4

    2.10 高级教程:如何编写可重用的apps 2.10.1 重用的概念 The Python Package Index (PyPI)有大量的现成可用的Python库.https://www.djan ...

  7. ReactiveX/RxJava文档中文版

    项目地址:https://github.com/mcxiaoke/RxDocs,欢迎Star和帮忙改进. 有任何意见或建议,到这里提出 Create New Issue 阅读地址 ReactiveX文 ...

  8. “全能”选手—Django 1.10文档中文版Part1

    本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正. 另外对于公开文档进行翻译的版权问题不是很清楚,如有侵权请联系我! 另外,要转载 ...

  9. Django2.0文档

    第四章 模板 1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% e ...

随机推荐

  1. APUE-文件和目录(一)

    4.1 函数stat 函数stat返回与此命名文件有关的信息结构.下面的代码实现了一个工具,显示树形目录结构,需要加两个参数,一个为目录名,一个为显示目录的深度. #include <sys/s ...

  2. 一天搞定CSS: 清除浮动(float)--13

    上一节已经说明了为什么要清除浮动了.这里我们就来解决浮动产生的各种问题. 为什么要清楚浮动? 地址:http://blog.csdn.net/baidu_37107022/article/detail ...

  3. 《物联网框架ServerSuperIO教程》-20.网络通讯控制器分组,提高交互的负载平衡能力。v3.6.6 版本发布

    20.1     概述 ServerSuperIO原来在网络通讯模式下,只有一个网络控制器,在自控模式.并发模式和单例模式下时都是异步处理返回的数据,并不会出现性能问题.但是在轮询模式下,一个网络控制 ...

  4. HTML/XML/XPATH基础

    Html超文本标记语言 网页上单击右键→查看源文件/查看源代码 Html基本结构 <html>               为文档根元素,所有元素都在内部进行 <head>   ...

  5. 通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用

      前  言  PHP     学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输 ...

  6. Linq to List

    var lstMater = lst.GroupBy(w => new { w.materialId, w.name, w.isPass, w.description }). Select(g ...

  7. 发布.net mvc遇到的HTTP错误 403.14-Forbidden解决办法

    请检查一下"处理程序映射",里面是否有"ExtensionlessUrlHandler-Integrated-4.0",如果没有,请注册.net4.0 在运行里 ...

  8. .NET Core程序中使用User Secrets存储敏感数据

    前言 在开发中经常会用到一些敏感数据,比如AppSecret或数据库连接字符串,无论是硬编码还是写在配置文件中,最终都要push到svn或git上.对于开源项目,这些敏感数据就无隐私可言了,对于私有项 ...

  9. Mac, Linux中配置Latex中文字体

    对于中文的latex文档,在Linux下一般可以使用系统自带的开源字体:文泉驿(WenQuanYi)来实现,即如下的最小例子,通过xelatex命令来编译即可生成中文文档. \documentclas ...

  10. 深入浅出TCP/IP协议栈

    TCP/IP协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP协议采用4层结构,分别是应用层.传输层.网络层和链路层, ...