Spark的Java和Scala API的使用

2023-05-16

  • Spark的Java和Scala API的使用

    实验环境

    Linux Ubuntu 16.04
    前提条件:

    1. Java 运行环境部署完成
    2. Spark Local模式部署完成
      上述前提条件,我们已经为你准备就绪了。

    实验内容

    在上述前提条件下,完成Spark中Scala和Java API的使用

  • 实验步骤

    1.点击"命令行终端",打开新窗口

  • 2.启动Scala的Shell

    在命令行终端中输入下面的命令即可启动Scala Shell

    启动后终端显示如下:

    如上出现了 Scala>表明进入了Scala的Shell

  • 3.弹性分布式数据集RDD

    RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

  • 4.RDD的创建方法

    1) 由一个已经存在的Scala集合创建。

    2) 由外部存储系统的数据集创建,包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等

  • RDD编程Scala API

    5.Transformation转换

    RDD中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时,这些转换才会真正运行。这种设计让Spark更加有效率地运行。
    常用的Transformation
    map(func)
    返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成

    filter(func)
    返回一个新的RDD,该RDD由经过func函数计算后返回值为true的输入元素组成

    flatMap(func)
    类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素)

    union(otherDataset)
    对源RDD和参数RDD求并集后返回一个新的RDD

    intersection(otherDataset)
    对源RDD和参数RDD求交集后返回一个新的RDD

    groupByKey([numTasks])
    在一个(K,V)的RDD上调用,返回一个(K, Iterator[V])的RDD

    reduceByKey(func, [numTasks])
    在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,与groupByKey类似,reduce任务的个数可以通过第二个可选的参数来设置

    sortByKey([ascending], [numTasks])
    在一个(K,V)的RDD上调用,K必须实现Ordered接口,返回一个按照key进行排序的(K,V)的RDD

    join(otherDataset, [numTasks])
    在类型为(K,V)和(K,W)的RDD上调用,返回一个相同key对应的所有元素对在一起的(K,(V,W))的RDD

  • 6.Action动作

    常用的Action

    reduce(func)
    通过func函数聚集RDD中的所有元素,这个功能必须是课交换且可并联的

    collect()
    在驱动程序中,以数组的形式返回数据集的所有元素

    count()
    返回RDD的元素个数

    first()
    返回RDD的第一个元素(类似于take(1))

    take(n)
    返回一个由数据集的前n个元素组成的数组

    takeSample(withReplacement,num, [seed])
    返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子

    saveAsTextFile(path)
    将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本

    saveAsSequenceFile(path)
    将数据集中的元素以Hadoop sequencefile的格式保存到指定的目录下,可以使HDFS或者其他Hadoop支持的文件系统。

    foreach(func)
    在数据集的每一个元素上,运行函数func进行更新。

  • 熟悉API的操作

    7.练习1

    在Scala命令行中运行下面的代码

    通过并行化生成rdd

    对rdd1里的每一个元素乘2然后排序

    过滤出大于等于十的元素

    将元素以数组的方式在客户端显示

    运行上述代码后,显示如下:

  • 8.练习2

    在Scala命令行中运行下面的代码

    将rdd1里面的每一个元素先切分在压平

    运行上述代码后,显示如下:

  • 9.练习3

    在Scala命令行中运行下面的代码

    求并集

    求交集

    去重

    运行上述代码后,显示如下:

  • 10.练习4

    在Scala命令行中运行下面的代码

    求jion

    求并集

    按key进行分组

    运行上述代码后,显示如下:

  • 11.练习5

    在Scala命令行中运行下面的代码

    cogroup, 注意cogroup与groupByKey的区别

    运行上述代码后,显示如下:

  • 12.练习6

    在Scala命令行中运行下面的代码

    reduce聚合

    运行上述代码后,显示如下:

  • 13.练习7

    在Scala命令行中运行下面的代码

    按key进行聚合

    按value的降序排序

    运行上述代码后,显示如下:

  • Spark Java API的使用

    由于Spark中Scala和Java的API几乎是一样的,这里就使用Java来完成一个wordcount案例,达到熟练Java API的目的。

    14.双击桌面的Eclipse图标,打开Eclipse

    双击后会弹出窗口,指定工作空间路径,直接点击OK默认路径就好。如图1:

  • 15.新建Java项目

    新建java项目,选中Eclipse左上角File——>New——>Java Project
    输入项目名Example,选中 Use default JRE(currently ‘java’),点击Finish

  • 16.导入依赖的外部jar包

    右击项目,选择Build Path——>Configure Build Path…

    加入项目依赖的Spark Jar包。选中Libraries,单击右侧Add External JARs
    找到/apps/spark/jars目录,按Ctrl+A选中该目录下所有Jar包,点击OK,再点击Apply后,再点击OK

  • 17.创建类

    创建类,右击项目下的src目录,选中New——>Class
    在Package处填写包名com.doplhin.labs,Name处填写类名WordCountJava,点击Finish

  • 18.编写代码

    右击桌面上的wordCountJava.txt文件,选择用编辑器打开,复制文件中所有内容,粘贴到Eclipse上,再关闭编辑器即可

  • 19.运行

    点击Eclipse上方绿色按钮来运行代码

    如上所示,显示了/apps/spark/README.md文件中,所有单词出现的次数,表示实验成功。
    至此,本次实验结束啦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark的Java和Scala API的使用 的相关文章

  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Scala 解析器组合器的运算符优先级

    我正在研究需要考虑运算符优先级的解析逻辑 我的需求并不太复杂 首先 我需要乘法和除法比加法和减法具有更高的优先级 例如 1 2 3 应视为 1 2 3 这是一个简单的例子 但你明白了 我需要将更多自定义标记添加到优先级逻辑中 我可以根据此处
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 分析 sbt 构建

    我的 sbt 构建需要很长时间 它又大又复杂 很难知道从哪里开始清理 看起来 sbt 保留了很多关于构建结构的元数据 包括相互依赖关系 命名任务 范围界定等 有了所有这些元数据 似乎很容易跳入并测量每个不同任务 及其范围 花费的时间 在代码
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 算法—求x的平方根,只保留整数部分(Java)

    需求 给你一个非负整数 x xff0c 计算并返回 x 的 算术平方根 由于返回类型是整数 xff0c 结果只保留 整数部分 xff0c 小数部分将被 舍去 注意 xff1a 不允许使用任何内置指数函数和算符 xff0c 例如 pow x
  • Finding memory bugs with AddressSanitizer

    AddressSanitizer ASan is an instrumentation tool created by Google security researchers to identify memory access proble
  • Android编译出现Warning: Mapping new ns to old ns的解决方案

    出现场景 更新了Android Studio版本后 xff0c 运行项目就出现以下警告 Warning Mapping new ns http schemas android com repository android common 02
  • Maven详细配置(全)

    目录 前言 maven下载配置 配置文件的修改 前言 maven是一个jar包管理工具 可以管理多个jar包 Maven是一个项目管理工具 它包含了一个项目对象模型 Project Object Model 一组标准集合 一个项目生命周期
  • Tomcat:HTTP状态 404 - 未找到解决方法

    出现如下问题 HTTP状态 404 未找到 类型 状态报告 消息 请求的资源 ajax war exploded 不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示 Apache Tomcat 8 5 69 H
  • jdk动态代理(AOP)从入门到精通(全)

    目录 前言1 了解代理模式2 静态代理案例3 动态代理3 1 入门案例3 2 原理实现3 3 深层案例3 4 步骤流程 4 模板总结 前言 整篇文章的代码源码如下 代码源码 理解什么是动态代理以及动态代理能干什么 使用jdk的反射机制 xf
  • SpringBoot从入门到精通(全)

    目录 前言1 入门案例1 1 新建项目1 2 代码模板 2 配置详解2 1 核心配置文件properties2 2 核心配置文件yml yaml2 3 多环境核心配置文件properties2 4 多环境核心配置文件yml2 5 自定义配置
  • jdbc之问号占位符的详细分析

    目录 前言实战 前言 先写sql语句框架 一个问号代表一个占位符 xff0c 之后占位符接收一个值占位符不可使用双引号或者单引号获取占位符 xff0c 给占位符传值 xff0c 通过setString等方法 之所以要用问号占位符 xff0c
  • docker出现Error response from daemon: driver failed programming external connectivity on endpoint解决方法

    目录 1 问题所示 2 分析原理 3 问题解决 1 问题所示 出现了如下问题 即简单测试run命令 运行一个简易命令不加端口的tomcat docker run d P name tomcat01 tomcat docker span cl
  • java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

    目录 前言1 学习路线2 学习方法 前言 这篇文章主要总结我之前所学过的框架以及学习路线 从实打实的零基础到框架再到项目 之后实习工作 也在这篇博客中记录我的学习笔记 以及在笔记中遇到的配置安装 代码bug等错误 都从零开始摸索并且记录了下
  • Bootstrap从入门到精通(全)

    目录 前言1 下载安装2 布局容器和栅格网格系统2 1 布局容器2 2 栅格网格系统 3 常用样式4 表单4 1 控件4 2 布局 5 插件5 1 导航框5 2 下拉菜单 前言 在了解这篇文章的时候 需要提前知道这些知识点 可看我之前的文章
  • RestTemplate的超全讲解(全)

    目录 前言1 简介2 http状态码3 get请求4 post请求5 Exchange 前言 主要介绍RestTemplate的原理以及使用等 1 简介 常见的http客户端请求工具 xff1a jdk HttpURLConnectionA
  • 出现蓝屏代码为DPC_WATCHDOG_VIOLATION的解决方法

    最近过年 电脑一直时不时出现这个问题 已经严重影响我的工作 你的设备遇到问题 需要重启 我们只收集某些错误信息 然后你可以重新启动 有关此问题的详细信息和可能的解决方法 请访问 https www windows com stopcode
  • Diagnosing Memory Heap Corruption in glibc with MALLOC_CHECK_

    原文链接 https support microfocus com kb doc php id 61 3113982 Environment Novell eDirectory 8 7 3 for Linux Novell eDirecto
  • Java集合的常见面试题(全)

    这里写目录标题 前言常用的集合类有哪些集合底层数据结构ArrayList 和 LinkedList 的区别HashSet 如何检查重复HashSet与HashMap的区别HashMap 和 Hashtable 的区别HashMap 的底层实
  • batchsize大小对网络模型的理解

    目录 前言1 batchsize定义2 batchsize大小3 batchsize平衡 前言 每一次的epoch都是将其数据集经过神经网络 xff0c 进行正向传播以及反向传播 由于epoch训练的数据集可能过大 xff0c 需要将其分块
  • 【密码学】ElGamal加密算法原理 以及 例题讲解

    目录 前言1 原理2 例题2 1 例题一2 2 例题二 前言 具体的性质 xff1a 非对称加密算法应用于一些技术标准中 xff0c 如数字签名标准 xff08 DSS xff09 S MIME 电子邮件标准算法定义在任何循环群 G 上 x
  • YOLOv5网络模型的结构原理讲解(全)

    目录 前言1 基本概念2 输入端2 1 Mosaic 图像增强2 2 自适应锚框计算2 3 自适应图片缩放 3 Backbone层3 1 Focus结构3 2 CSP结构 3 Neck网络3 1 SPP结构3 2 PAN结构 4 输出端4
  • 初级版元胞自动机(2021-11-17)

    初级版元胞自动机 2021 11 17 1 原因 xff1a 最近接触了群体智能 xff0c 想起了元胞自动机之前玩过一个游戏 xff0c 类似生命游戏 xff0c 但找不到了 2 实现 xff1a span class token key
  • Spark的Java和Scala API的使用

    Spark的Java和Scala API的使用 实验环境 Linux Ubuntu 16 04 前提条件 xff1a Java 运行环境部署完成Spark Local模式部署完成 上述前提条件 xff0c 我们已经为你准备就绪了 实验内容