Spark开发指南

article/2025/10/9 3:57:38

目 录

6 Spark开发指南

6.1 概述

6.2 开发环境准备

6.2.1 Java开发环境准备

6.2.2 Scala开发环境准备

6.3 开发指引

6.4 Java代码样例

6.5 Scala代码样例

6.6 对外接口

6.6.1 Java API

6.6.2 Scala API

6.6.3 Python API

6.6.4 Web UI

6.6.5 JDBC

6 Spark开发指南

 

  • 6.1 概述
  • 6.2 开发环境准备
  • 6.3 开发指引
  • 6.4 Java代码样例
  • 6.5 Scala代码样例
  • 6.6 对外接口

6.1 概述

目标读者

本文档专供需要进行Spark应用开发的用户使用。本指南主要适用于具备Java和Scala开发经验的开发人员。

简介

Spark是分布式批处理系统和分析挖掘引擎,提供迭代式内存计算框架,支持多种语言(Scala/Java/Python)的应用开发能力。 适用场景:

  • 数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性。
  • 迭代计算(Iterative Computation):支持迭代计算,有效应对多步的数据处理逻辑。
  • 数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持各种数据挖掘和机器学习算法。

基本概念

以下为重要概念,可以帮助您减少在学习Spark框架所花费的时间,有助于Spark开发完全聚焦于实际业务。

6.2 开发环境准备

6.2.1 Java开发环境准备

操作场景

本开发指南提供了Spark组件的样例代码和常用接口,便于开发者快速熟悉Spark并行计算框架。为了运行Spark组件的样例代码,你需要完成下面的操作。

开发环境可以搭建在Windows环境下,而运行环境(即客户端)只能部署在Linux环境下。

操作步骤

  1. 确认Spark组件已经安装,并正常运行。
  2. 对于scala开发环境,客户端机器推荐使用IDEA工具,安装要求如下:

     

    • JDK使用1.7版本
    • IntelliJ IDEA(版本:13.1.4),下载路径:http://www.jetbrains.com/idea/download/index.html。
    • Scala(版本:2.10.4),下载路径:http://www.scala-lang.org/files/archive/scala-2.10.4.msi。

     

  3. 安装IntelliJ IDEA和Scala工具,并进行相应的配置。

     

    1. 安装IntelliJ IDEA和Scala工具。
    2. 安装Scala插件。
      1. 打开IntelliJ IDEA,如图1所示,选择“Configure”。

        图6-5 configure 

      2. 如图6-6所示界面中,选择“Plugins”。

        图6-6 Plugins 

      3. 如图 3 所示界面中,选择“Install plugin from disk”。

        图6-7 Install plugin from disk 

      4. 在出现的搜索框中搜索Scala,并安装。

     

  4. 客户端机器的时间与Spark集群的时间要保持一致,时间差要小于5分钟。

     

    FusionInsight HD集群的时间可通过登录主管理节点(集群管理IP地址所在节点)运行date命令查询。

     

  5. 下载Spark客户端程序到客户端机器中。

     

    1. 登录FusionInsight Manager系统。

      在浏览器地址栏中输入访问地址,地址格式为“http://FusionInsight Manager系统的WebService浮动IP地址:8080/web”。

      例如,在IE浏览器地址栏中,输入“http://10.10.10.172:8080/web”。

    2. 单击“Services > Spark> Download Client”,下载客户端程序到本地机器。 说明:

      下载所有组件的客户端程序安装包,可通过在界面选择“Services > Download Client”进行下载。

     

  6. 解压缩客户端文件包。

     

     说明:

    客户端程序文件包为tar格式,可采用如下方式解压。

    • Windows: 下载7zip工具,双击压缩包进行解压。
    • Linux: 执行tar xf [客户端文件包]命令解压。

     

  7. 客户端安装。

     

     说明:

    客户端支持Linux安装。

    1. 创建客户端安装目录

      例如:mkdir /opt/spark_client

    2. 安装客户端

      执行6解压后的客户端安装包中的install.sh安装程序,执行该程序需要输入客户端安装的目标路径。

      例如:./install.sh /opt/spark_client

    3. 加载环境变量。

      进入客户端的安装路径,运行source bigdata_env。

      例如:source /opt/spark_client/bigdata_env

    4. 如果启用安全模式,需要使用业务账号进行安全认证。您可以联系管理员获取账号和密码。执行如下命令,输入密码后获取认证。

      其中spark表示业务账号的名称。

      kinit spark

    5. 安全模式下如果要在程序中通过机机帐号进行认证,请参见《MapReduce开发指南》中的运行应用的“使用机机帐号在Linux客户端运行应用程序”部分。 说明:在二次开发过程中,PRINCIPAL需要用到的用户名,应该填写为带域名的用户名,例如创建的用户为user,其PRINCIPAL用户名则为user@HADOOP.COM,代码举例:
      conf.set(PRINCIPAL, "user@HADOOP.COM");

     

  8. 配置客户端网络连接。

     

     说明:

    当客户端所在主机不是集群中的节点时,配置客户端网络连接,可避免执行客户端命令时出现错误。

    1. 确认客户端与服务端各个主机网络上互通。
    2. 如果采用yarn-client模式运行Spark任务,请在客户端的“#{client_install_home}/Spark/spark/conf/spark-defaults.conf”文件中添加参数“spark.driver.host”,并将参数值设置为客户端的IP。

      如果不采用yarn-client模式运行Spark任务,则执行8.c。

    3. 确认客户端中是否存在DNS服务器。
      1. 是,执行8.d。
      2. 否,执行8.e。
    4. 将“hosts”文件内容导入DNS服务器,执行9。
    5. 拷贝解压目录下的“hosts”文件中的内容,到客户端的hosts文件中。本地hosts文件存放路径举例:“/etc/hosts” 说明:
      • 当采用yarn-client模式时,为了Spark Web UI能够正常显示,需要在yarn的主备节点,即集群中的ResourceManager节点,将客户端的IP及主机名对应关系配置到hosts文件中。
      • 当采用yarn-client模式时,客户端的hosts文件必须配置客户端自己的IP和hostname对应关系。

     

  9. 导入Java代码样例工程到IDEA开发环境。

     

    1. 在windows上的客户端安装包中存在Spark的样例工程“Spark\SparkJavaExample”。 说明:

      由于样例工程在windows中搭建,所以需要把该工程拷贝到windows系统中,以备后续导入样例工程所有操作均在windows上进行。

    2. 解压客户端安装包。

      运行“$ClientConfig_Path\Spark\install.bat”导入工程依赖包。

    3. 单击“File > Open”,选择样例工程的SparkJavaExample文件夹,单击“OK”,工程成功导入。
    4. 设置IDEA的文本文件编码格式,解决乱码显示问题。

      在IDEA的菜单栏中,选择“”图标。弹出“Settings”窗口。

      在左边导航上选择“File Encodings”,在“IDE encoding”区域,选择参数值为“UTF-8”,单击“Apply”后,单击“OK”,如图6-8所示。

      图6-8 File Encodings 

     

  10. (可选)使用IDEA创建一个Spark样例工程。

     

    1. 如图6-9所示,选择“Create New Project”创建工程。

      图6-9 创建工程 

    2. 如图6-10所示,选择“Java”开发环境,并选择“Groovy”,然后单击“Next”。

      图6-10 选择开发环境 

    3. 在如图6-11所示的界面中,填写工程名称和存放路径,然后单击“Finish”完成工程创建。

      图6-11 填写工程信息 

     

6.2.2 Scala开发环境准备

操作场景

本开发指南提供了Spark组件的样例代码和常用接口,便于开发者快速熟悉Spark并行计算框架。为了运行Spark组件的样例代码,你需要完成下面的操作。

开发环境可以搭建在Windows环境下,而运行环境(即客户端)只能部署在Linux环境下。

操作步骤

  1. 确认Spark组件已经安装,并正常运行。
  2. 对于scala开发环境,客户端机器推荐使用IDEA工具,安装要求如:

     

    • JDK使用1.7版本
    • IntelliJ IDEA(版本:13.1.4),下载路径:http://www.jetbrains.com/idea/download/index.html。
    • Scala(版本:2.10.4),下载路径:http://www.scala-lang.org/files/archive/scala-2.10.4.msi。

     

  3. 安装IntelliJ IDEA和Scala工具,并进行相应的配置。

     

    1. 安装IntelliJ IDEA和Scala工具。
    2. 安装Scala插件。
      1. 打开IntelliJ IDEA,如图1所示,选择“Configure”。

        图6-12 configure 

      2. 如图6-13所示界面中,选择“Plugins”。

        图6-13 Plugins 

      3. 如图 3 所示界面中,选择“Install plugin from disk”。

        图6-14 Install plugin from disk 

      4. 在出现的搜索框中搜索Scala,并安装。

     

  4. 客户端机器的时间与Spark集群的时间要保持一致,时间差要小于5分钟。

     

    FusionInsight HD集群的时间可通过登录主管理节点(Hadoop管理IP地址所在节点)运行date命令查询。

     

  5. 下载Spark客户端程序到客户端机器中。

     

    1. 登录FusionInsight Manager系统。

      在浏览器地址栏中输入访问地址,地址格式为“http://FusionInsight Manager系统的WebService浮动IP地址:8080/web”。

      例如,在IE浏览器地址栏中,输入“http://10.10.10.172:8080/web”。

    2. 单击“Services > Spark> Download Client”,下载客户端程序到本地机器。 说明:

      下载所有组件的客户端程序安装包,可通过在界面选择“Services > Download Client”进行下载。

     

  6. 解压缩客户端文件包。

     

     说明:

    客户端程序文件包为tar格式,可采用如下方式解压。

    • Windows: 下载7zip工具,双击压缩包进行解压。
    • Linux: 执行tar xf [客户端文件包]命令解压。

     

  7. 客户端安装。

     

     说明:

    客户端支持Linux安装。

    1. 创建客户端安装目录

      例如:mkdir /opt/spark_client

    2. 安装客户端

      执行6解压后的客户端安装包中的install.sh安装程序,执行该程序需要输入客户端安装的目标路径。

      例如:./install.sh /opt/spark_client

    3. 加载环境变量。

      进入客户端的安装路径,运行source bigdata_env。

      例如:source /opt/spark_client/bigdata_env

    4. 如果启用安全模式,需要使用业务账号进行安全认证。您可以联系管理员获取账号和密码。执行如下命令,输入密码后获取认证。

      其中spark表示业务账号的名称。

      kinit spark

    5. 安全模式下如果要在程序中通过机机帐号进行认证,请参见《<MapReduce开发指南》的运行应用的“使用机机帐号在Linux客户端运行应用程序”部分。 说明:在二次开发过程中,PRINCIPAL需要用到的用户名,应该填写为带域名的用户名,例如创建的用户为user,其PRINCIPAL用户名则为user@HADOOP.COM,代码举例:
      conf.set(PRINCIPAL, "user@HADOOP.COM");

     

  8. 配置客户端网络连接。

     

     说明:

    当客户端所在主机不是集群中的节点时,配置客户端网络连接,可避免执行客户端命令时出现错误。

    1. 确认客户端与服务端各个主机网络上互通。
    2. 如果采用yarn-client模式运行Spark任务,请在客户端的“#{client_install_home}/Spark/spark/conf/spark-defaults.conf”文件中添加参数“spark.driver.host”,并将参数值设置为客户端的IP。

      如果不采用yarn-client模式运行Spark任务,则执行8.c。

    3. 确认客户端中是否存在DNS服务器。
      1. 是,执行8.d。
      2. 否,执行8.e。
    4. 将“hosts”文件内容导入DNS服务器,执行9。
    5. 拷贝解压目录下的“hosts”文件中的内容,到客户端的hosts文件中。本地hosts文件存放路径举例:“/etc/hosts” 说明:
      • 当采用yarn-client模式时,为了Spark Web UI能够正常显示,需要在yarn的主备节点,即集群中的ResourceManager节点,将客户端的IP及主机名对应关系配置到hosts文件中。
      • 当采用yarn-client模式时,客户端的hosts文件必须配置客户端自己的IP和hostname对应关系。

     

  9. 导入Scala代码样例工程到IDEA开发环境。

     

    1. 在windows上的客户端安装包中存在Spark的样例工程“Spark\SparkScalaExample”。 说明:

      由于样例工程在windows中搭建,所以需要把该工程拷贝到windows系统中,以备后续导入样例工程所有操作均在windows上进行。

    2. 解压客户端安装包。

      运行“$ClientConfig_Path\Spark\install.bat”导入工程依赖包。

    3. 单击“File > Open”,选择样例工程的SparkScalaExample文件夹,单击“OK”,工程成功导入。
    4. 设置IDEA的文本文件编码格式,解决乱码显示问题。

      在IDEA的菜单栏中,选择“”图标。弹出“Settings”窗口。

      在左边导航上选择“File Encodings”,在“IDE encoding”区域,选择参数值为“UTF-8”,单击“Apply”后,单击“OK”,如图6-15所示。

      图6-15 File Encodings 

     

  10. (可选)使用IDEA创建一个Spark样例工程。

     

    1. 如图6-16所示,选择“Create New Project”创建工程。

      图6-16 创建工程 

    2. 如图6-17所示,选择“Scala”开发环境,并选择“Non-SBT”,然后单击“Next”。

      图6-17 选择开发环境 

    3. 在如图6-18所示的界面中,填写工程名称和存放路径,勾选“Config later”。待工程创建完毕后引入scala的编译库文件,然后单击“Finish”完成工程创建。

      图6-18 填写工程信息 

     

6.3 开发指引

应用程序实例

假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发Spark应用程序实现如下功能:

  • 统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。
  • 周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,”。

log1.txt:周六网民停留日志

LiuYang,female,20
YuanJing,male,10
GuoYijun,male,5
CaiXuyu,female,50
Liyuan,male,20
FangBo,female,50
LiuYang,female,20
YuanJing,male,10
GuoYijun,male,50
CaiXuyu,female,50
FangBo,female,60

log2.txt:周日网民停留日志

LiuYang,female,20
YuanJing,male,10
CaiXuyu,female,50
FangBo,female,50
GuoYijun,male,5
CaiXuyu,female,50
Liyuan,male,20
CaiXuyu,female,50
FangBo,female,50
LiuYang,female,20
YuanJing,male,10
FangBo,female,50
GuoYijun,male,50
CaiXuyu,female,50
FangBo,female,60

数据准备

首先需要把原日志文件放置在HDFS系统里。

  1. 本地新建两个文本文件,将log1.txt中的内容复制保存到input_data1.txt,将log2.txt中的内容复制保存到input_data2.txt。
  2. 在HDFS上建立一个文件夹,“/tmp/input”,并上传input_data1.txt,input_data2.txt到此目录,命令如下:
    1. 在linux系统HDFS客户端使用命令“hadoop fs -mkdir /tmp/input(hdfs dfs命令有同样的作用)”,创建对应目录。
    2. 在linux系统HDFS客户端使用命令“hadoop fs -put 本地input.txt地址 /tmp/input”,上传数据文件。

代码样例

统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。

Spark的应用程序可使用Java语言或者Scala语言来实现:代码样例请参考6.4 Java代码样例和6.5 Scala代码样例。

6.4 Java代码样例

功能介绍

统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。

主要分为四个部分:

  • 读取原文件数据。
  • 筛选女性网民上网时间数据信息。
  • 汇总每个女性上网总时间。
  • 筛选出停留时间大于两个小时的女性网民信息。

代码样例

下面代码片段仅为演示,具体代码参见com.huawei.bigdata.spark.examples.CollectFemaleInfo类:

    //创建一个配置类SparkConf,然后创建一个SparkContextSparkConf conf = new SparkConf().setAppName("CollectFemaleInfo");JavaSparkContext jsc = new JavaSparkContext(conf);//读取原文件数据,每一行记录转成RDD里面的一个元素JavaRDD<String> data = jsc.textFile(args[0]);//将每条记录的每列切割出来,生成一个TupleJavaRDD<Tuple3<String,String,Integer>> person = data.map(new Function<String,Tuple3<String,String,Integer>>(){private static final long serialVersionUID = -2381522520231963249L;@Overridepublic Tuple3<String, String, Integer> call(String s) throws Exception{//按逗号分割一行数据String[] tokens = s.split(",");//将分割后的三个元素组成一个三元TupleTuple3<String, String, Integer> person = new Tuple3<String, String, Integer>(tokens[0], tokens[1], Integer.parseInt(tokens[2]));return person;}});//使用filter函数筛选出女性网民上网时间数据信息    JavaRDD<Tuple3<String,String,Integer>> female = person.filter(new Function<Tuple3<String,String,Integer>, Boolean>(){private static final long serialVersionUID = -4210609503909770492L;@Overridepublic Boolean call(Tuple3<String, String, Integer> person) throws Exception{//根据第二列性别,筛选出是female的记录Boolean isFemale = person._2().equals("female");return isFemale;}});//汇总每个女性上网总时间JavaPairRDD<String, Integer> females = female.mapToPair(new PairFunction<Tuple3<String, String, Integer>, String, Integer>(){private static final long serialVersionUID = 8313245377656164868L;@Overridepublic Tuple2<String, Integer> call(Tuple3<String, String, Integer> female) throws Exception{//取出姓名和停留时间两列,用于后面按名字求逗留时间的总和Tuple2<String, Integer> femaleAndTime = new  Tuple2<String, Integer>(female._1(), female._3());return femaleAndTime;}}).reduceByKey(new Function2<Integer, Integer, Integer>(){private static final long serialVersionUID = -3271456048413349559L;@Overridepublic Integer call(Integer integer, Integer integer2) throws Exception{//将同一个女性的两次停留时间相加,求和return (integer + integer2);}});//筛选出停留时间大于两个小时的女性网民信息JavaPairRDD<String, Integer> rightFemales = females.filter(new Function<Tuple2<String, Integer>, Boolean>(){private static final long serialVersionUID = -3178168214712105171L;@Overridepublic Boolean call(Tuple2<String, Integer> s) throws Exception{//取出女性用户的总停留时间,并判断是否大于2小时if(s._2() > (2 * 60)){return true;}return false;}});//对符合的female信息进行打印显示for(Tuple2<String, Integer> d: rightFemales.collect()){System.out.println(d._1() + "," + d._2());}

6.5 Scala代码样例

功能介绍

统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。

主要分为三个部分:

  • 读取女性网民上网时间数据信息组成Spark的RDD数据,通过Spark中类SparkContext中textFile方法实现
  • 从原文件中筛选女性网民上网时间数据信息,通过Spark中RDD中filter方法实现。
  • 汇总每个女性上网时间,并输出时间大于两个小时的女性网民信息,通过Spark中RDD中reduceByKey方法类和filter实现。

代码样例

下面代码片段仅为演示,具体代码参见com.huawei.bigdata.spark.examples.CollectFemaleInfo类:

样例:类CollectMapper

//配置Spark应用名称
val conf = new SparkConf().setAppName("CollectFemaleInfo")//提交Spark作业
val sc = new SparkContext(conf)
//读取数据。其是传入参数args(0)指定数据路径
val text = sc.textFile(args(0))
//筛选女性网民上网时间数据信息
val data = text.filter(_.contains("female"))
//汇总每个女性上网时间
val femaleData:RDD[(String,Int)] = data.map{line =>val t= line.split(',')(t(0),t(2).toInt)
}.reduceByKey(_ + _)
//筛选出时间大于两个小时的女性网民信息,并输出
val result = femaleData.filter(line => line._2 > 120)
result.foreach(println)

6.6 对外接口

 

6.6.1 Java API

Spark完整的类及方法参考官方网站的描述: https://spark.apache.org/docs/latest/api/java/index.html

常用接口

Spark主要使用到如下这几个类:

  • JavaSparkContext: 是Spark的对外接口,负责向调用该类的java应用提供Spark的各种功能,如连接Spark集群,创建RDD,累积量和广播量等。它的作用是一个容器。
  • SparkConf:Spark应用配置类,如设置应用名称,执行模式,executor内存等。

    JavaRDD :用于在java应用中定义JavaRDD的类,功能类似于scala中的“RDD(Resilient Distributed Dataset)”类。

  • JavaPairRDD:表示key-value形式的JavaRDD。该类提供的方法有groupByKey,reduceByKey等。
  • Broadcast: 广播变量类。广播变量允许保留一个只读的变量,缓存在每一台机器上,而非每个任务保存一份拷贝。
  • StorageLevel: 数据存储级别,有内存(MEMORY_ONLY),磁盘(DISK_ONLY),内存+磁盘(MEMORY_AND_DISK)等。

 

JavaRDD支持两种类型的操作: transformation和action,这两种类型的常用方法如表6-1和表6-2。

表6-1 transformation

方法

说明

map(func)

对调用map的RDD数据集中的每个element都使用func。

filter(func)

对RDD中所有元素调用func,返回f为true的元素。

flatMap(func)

先对RDD所有元素调用func,然后将结果扁平化。

sample(withReplacement,faction,seed)

抽样。

distinct([numTasks])

去除重复元素。

groupByKey(numTasks)

返回(K,Seq[V]),将key相同的value组成一个集合。

reduceByKey(func,[numTasks])

对key相同的value调用func。

sortByKey([ascending],[numTasks])

按照key来进行排序,是升序还是降序,ascending是boolean类型。

join(otherDataset,[numTasks])

当有两个KV的dataset(K,V)和(K,W),返回的是(K,(V,W))的dataset,numTasks为并发的任务数。

cogroup(otherDataset,[numTasks])

当有两个KV的dataset(K,V)和(K,W),返回的是(K,Seq[V],Seq[W])的dataset,numTasks为并发的任务数。

cartesian(otherDataset)

笛卡尔积。

表6-2 action

方法

说明

reduce(func)

对RDD中的元素调用func。

collect()

返回包含RDD中所有元素的一个数组。

count()

返回的是dataset中的element的个数。

first()

返回的是dataset中的第一个元素。

take(n)

返回前n个elements。

takeSample(withReplacement,num,seed)

对dataset随机抽样,返回有num个元素组成的数组。withReplacement表示是否使用replacement。

saveAsTextFile(path)

把dataset写到一个text file中,或者hdfs,或者hdfs支持的文件系统中,spark把每条记录都转换为一行记录,然后写到file中。

saveAsSequenceFile(path)

只能用在key-value对上,然后生成SequenceFile写到本地或者hadoop文件系统。

countByKey()

对RDD中每个元素出现的次数进行统计。

foreach(func)

在数据集的每一个元素上,运行函数func。

countByValue()

对RDD中每个元素出现的次数进行统计。

6.6.2 Scala API

Spark完整的类及方法参考官方网站的描述: https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.package

常用接口

Spark主要使用到如下这几个类:

  • SparkContext:是Spark的对外接口,负责向调用该类的java应用提供Spark的各种功能,如连接Spark集群,创建RDD等。
  • SparkConf:Spark应用配置类,如设置应用名称,执行模式,executor内存等。
  • RDD(Resilient Distributed Dataset):用于在Spark应用程序中定义RDD的类。
  • PairRDDFunctions:为key-value对的RDD数据提供运算操作,如groupByKey。
  • Broadcast: 广播变量类。广播变量允许保留一个只读的变量,缓存在每一台机器上,而非每个任务保存一份拷贝。
  • StorageLevel: 数据存储级别,有内存(MEMORY_ONLY),磁盘(DISK_ONLY),内存+磁盘(MEMORY_AND_DISK)等。

RDD上支持两种类型的操作: :transformation和action,这两种类型的常用方法如表6-3和表6-4。表6-3 transformation

方法

说明

map(func)

对调用map的RDD数据集中的每个element都使用func。

filter(func)

对RDD中所有元素调用func,返回f为true的元素。

flatMap(func)

先对RDD所有元素调用func,然后将结果扁平化。

sample(withReplacement,faction,seed)

抽样。

union(otherDataset)

返回一个新的dataset,包含源dataset和给定dataset的元素的集合。

distinct([numTasks])

去除重复元素。

groupByKey(numTasks)

返回(K,Iterable[V]),将key相同的value组成一个集合。

reduceByKey(func,[numTasks])

对key相同的value调用func。

sortByKey([ascending],[numTasks])

按照key来进行排序,是升序还是降序,ascending是boolean类型。

join(otherDataset,[numTasks])

当有两个KV的dataset(K,V)和(K,W),返回的是(K,(V,W))的dataset,numTasks为并发的任务数。

cogroup(otherDataset,[numTasks])

当有两个KV的dataset(K,V)和(K,W),返回的是(K,Seq[V],Seq[W])的dataset,numTasks为并发的任务数。

cartesian(otherDataset)

笛卡尔积。

表6-4 action

API

说明

reduce(func)

对RDD中的元素调用func。

collect()

返回包含RDD中所有元素的一个数组。

count()

返回的是dataset中的element的个数。

first()

返回的是dataset中的第一个元素。

take(n)

返回前n个elements。

takeSample(withReplacement,num,seed)

takeSample(withReplacement,num,seed)对dataset随机抽样,返回有num个元素组成的数组。withReplacement表示是否使用replacement。

saveAsTextFile(path)

把dataset写到一个text file中,或者hdfs,或者hdfs支持的文件系统中,spark把每条记录都转换为一行记录,然后写到file中。

saveAsSequenceFile(path)

只能用在key-value对上,然后生成SequenceFile写到本地或者hadoop文件系统。

countByKey()

对每个key出现的次数做统计。

foreach(func)

在数据集的每一个元素上,运行函数func。

countByValue()

对RDD中每个元素出现的次数进行统计。

6.6.3 Python API

如果您需要使用python语言的客户端运行Spark实例,您可以使用Spark提供的python API。请直接参考官网网站上的详细描述了解其使用: https://spark.apache.org/docs/latest/api/python/index.html

6.6.4 Web UI

操作场景

Spark主要有两个web页面。

  1. SparkUI页面,用于展示正在执行的应用的运行情况。

    页面包括了Stages、Storage、Environment和Executors四个部分。

  2. History Server页面,用于展示已经完成的spark应用的运行情况。

    页面包括了应用名称、开始时间、结束时间、执行时间、所属用户等信息。单击应用名称,页面将跳转到该应用的SparkUI页面。

 说明:

请联系管理员获取具有访问WebUI权限的业务帐号及其密码。

操作步骤

6.6.5 JDBC

JDBC Server是Hive中的HiveServer2的另外一个实现,它底层使用了Spark SQL来处理HQL语句,从而比Hive拥有更高的性能。

JDBC Server默认在安装节点上的22290端口起一个JDBC/ODBC服务,可以通过beeline来连接它,从而执行SQL命令。

Beeline及其他客户端的使用指导,请参见https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients。

如果您需要了解支持的Hive特性,请参见Spark官网:http://spark.apache.org/docs/1.1.0/sql-programming-guide.html#compatibility-with-apache-hive

JDBC Server不支持的场景有:

  • 不支持多个客户端同时连接Spark JDBC。
  • 在有索引列的表格中,进行添加列操作后查询会出现错误。例如:
    1. 建表:create table part4 (name string, age int, gender string) partitioned by (date string) row format delimited fields terminated by "\t";
    2. 导入数据:load data local inpath "/home/sqlfile/people" into table part4 partition (date="2014-10-27");
    3. 添加列:alter table part4 add columns (region string comment "where are u live")
    4. 查询:select * from part4;

http://chatgpt.dhexx.cn/article/tZqbuarG.shtml

相关文章

PIX飞控电流计设置

在 测量电池电压 一栏输入用电压表测得的电池电压&#xff0c;保存。

pixhawk飞控接口含义

官方文档&#xff1a;https://docs.px4.io/v1.9.0/en/flight_controller/pixhawk.html 1——spektrum DSM receiver2&#xff0c;3——远程通信口&#xff0c;接数传4——串口5——SPI6——电源口7——飞控的安全开关&#xff0c;长按启动解锁8——蜂鸣器9——串口10——GPS11—…

PIX飞控不能解锁问题总结

摘自&#xff1a;https://baijiahao.baidu.com/s?id1640767431717207814&wfrspider&forpc PIX飞控不能解锁问题总结 给力蹦小勇士 发布时间&#xff1a;19-08-0222:55 一、飞控故障或没校准 在地面站里飞行数据菜单查看报错。假如加速度计和地磁没校准&#xff0c;…

富斯i6航模遥控器配apm(pix)飞控mission planner疑难杂症解决策略(上)

提示&#xff1a;仅适用于新手入门参考。 目录 前言 在missionplanner调试遥控器出现信号异常&#xff0c;飞行调试出现操作异常如何处理&#xff0c;在硬件无损的前提下&#xff0c;如何进行简易调试&#xff0c;下文将介绍入门的处理办法。 一、切换飞行模式时突然出现油门…

Mission Planner初学者安装调试教程指南(APM或PIX飞控)3——连接与烧录

Mission Planner初学者安装调试教程指南&#xff08;APM或PIX飞控&#xff09;3——连接与烧录 目录 1.连接方式 2.烧录固件 1.连接方式 通常可以使用micro USB数据线直接连接APM&#xff08;pixhawk&#xff09;&#xff0c;将数据线一头接入电脑usb口&#xff0c;另一头接…

pixhawk飞控板的硬件构成

具体介绍 pixhawk是一款高性能的飞控板&#xff0c;它能用于固定翼&#xff0c;多旋翼&#xff0c;直升机&#xff0c;小车等多种应用。它能被用于研究用&#xff0c;玩耍用&#xff0c;甚至直接用于做产品。这款飞控其实是将PX4FMU和PX4IO做了一个封装&#xff0c;将两部分PC…

Mission Planner初学者安装调试教程指南(APM或PIX飞控)5——规划航点航线

目录 1.卫星地图上规划普通航点 2.曲线航点 3.规划多边形区域 4.环形航线 5. 曲线航线 6.设置网格 7.特殊航线 学习地面站&#xff0c;不可避免要触及英文指令。通过经常使用日常积累&#xff0c;可以熟练掌握各个指令的含义。serve the people heart and soul&#xff0…

OPENMV结合PIX飞控实现四轴定点 循迹 2017电赛

本文章代码已上传Github&#xff1a; https://github.com/Kevincoooool/2017_Follow 有兴趣的可以加个STAR 自从17年国赛之后&#xff0c;自己做了openmv&#xff0c;加了很多群&#xff0c;也了解到很多人都在想着这个题。 第一版 第二版 第三版 我们做国赛的时候实现了全…

飞行控制器Pixhawk简介

作者&#xff1a;华清远见讲师 Pixhawk是一款由PX4开源项目设计并由3DR公司制造生产的高级自动驾驶仪系统。其前身是APM&#xff0c;由于APM的处理器已经接近满负荷&#xff0c;没有办法满足更复杂的运算处理&#xff0c;所以硬件厂商采用了目前最新标准的32位ARM处理器&#x…

pixhawk飞控解锁方法

1. pixhawk飞控解锁方法是&#xff1a;油门(throttl)拉到最低,偏航角&#xff08;yaw&#xff09;拉到最右边。

如何用开源飞控PIXHAWK进行二次开发?

著作权归作者所有。 商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 作者&#xff1a;我是肉包子 链接&#xff1a;http://www.zhihu.com/question/38874663/answer/84239995 来源&#xff1a;知乎 以下所描述的都是针对px4原生固件&#xff0c;此外&#xff0…

APM和PIX飞控日志分析入门贴

我们在飞行中&#xff0c;经常会碰到各种各样的问题&#xff0c;经常有模友很纳闷&#xff0c;为什么我的飞机会这样那样的问题&#xff0c;为什么我的飞机会炸机&#xff0c;各种问题得不到答案是一件非常不爽的问题&#xff0c;在APM和PIX飞控中&#xff0c;都有记录我们整个…

开源飞控APM与PIXHAWK

一 APM 官网地址&#xff1a;http://ardupilot.org/ APM&#xff08;ArduPilotMega&#xff09; 是在2007年由DIY无人机社区&#xff08;DIY Drones&#xff09;推出的飞控产品&#xff0c;是当今最为成熟的开源硬件项目。APM基于Arduino的开源平台&#xff0c;对多处硬件做出了…

Mission Planner初学者安装调试教程指南(APM或PIX飞控)1——下载与版本

目录 1.概述 2.下载与版本 3.关于 ArduPilot wquav 1.概述 Misson Planner简称MP&#xff0c;图标为黑底大写白色字体MP加一个绿色固定翼飞机&#xff0c;是可以调试APM或者PIX飞控的地面站软件&#xff0c;可以运行在windows系统和Linux系统&#xff08;非直接安装&#x…

Pix4飞控常见问题解决方法(二)

一、无法解锁&#xff08;黄灯闪烁&#xff09; 无法解锁的原因会有多种&#xff0c;请按照如下步骤进行检查&#xff1a; 1、初始设置是否全部完成 a、机架类型选择是否正确&#xff0c;或者你根本就没有选择&#xff1f; 注意&#xff0c;新版本的飞控固件在默认参数情况下&…

Pix4飞控硬件平台框架(一)

硬件平台简介 本文只是为了让大家简单入门为主&#xff0c;所以我选择的硬件学习平台是Pixhawk系列的mRoPixhawk&#xff0c;兼容原始版本Pixhawk1&#xff0c;基于Pixhawk-project FMUv3开源硬件设计&#xff0c;修正了将原始版本flash限制在1MB这个bug&#xff0c;需要深入学…

Mission Planner中级应用(APM或PIX飞控)3——APM飞控安装双GPS测试 APM双GPS

目录 1.未得到答案和技术指导 2.第一次实验失败 3.完全废掉了解锁功能 4.调整RX/TX位置 5.成功解锁 6.广阔室外的探索 山重水复疑无路&#xff0c;柳暗花明又一村 ——Mission Planner中级应用&#xff08;APM或PIX飞控&#xff09;3——APM飞控安装双GPS测试 APM双GPS。…

Mission Planner初学者安装调试教程指南(APM或PIX飞控)4——校准加速度计、指南针、遥控器、设置飞行模式

目录 1.加速度计校准。 2.指南针校准。 3.遥控器校准。 安装完固件后&#xff0c;无人机并不能马上解锁起飞&#xff0c;必须进行校准加速度计、指南针、遥控器&#xff0c;下面就逐一进行校准&#xff0c;该环境使用的是APM2.8、Mission Planner1.3.70地面站软件。 1.加速…

每天读一点儿APM(PIX)代码之三:飞行控制

本期话题以ArduPlane代码为例分析了Ardupilot飞控体系对飞行器的反馈控制过程,并在实例中添加了一个直接易用的固定翼起飞辅助模式,供大家参考。 姿态控制是飞控的核心功能,不论固定翼还是多旋翼,都需要维持飞行器本身的稳定。ArduPilot采用反馈修正的方式进行姿态控制,以…

PixHawk飞控 配置参数

PixHawk飞控 PixHawk是著名飞控厂商3DR推出的新一代独立、开源、高效的飞行控制器&#xff0c;前身为APM飞控&#xff0c;不仅提供了丰富的外设模块和可靠的飞行体验&#xff0c;有能力的爱好者还可在其基础上进行二次开发。第一次使用需要多方查阅资料&#xff0c;摸索前行&a…