【大数据】Spark使用大全:下载安装、RDD操作、JAVA编程、SQL

news2025/1/10 16:45:57

目录

前言

1.下载安装

2.RDD操作

3.JAVA编程示例

4.Spark SQL


前言

本文是作者大数据系列中的一文,专栏地址:

https://blog.csdn.net/joker_zjn/category_12631789.html?spm=1001.2014.3001.5482

该系列会成体系的聊一聊整个大数据的技术栈,绝对干货,欢迎订阅。

1.下载安装

前置环境:

  • Hadoop 3.1.3
  • Java JDK 1.8

下载地址:

Downloads | Apache Spark

往下拉找到Spark release archives.

由于前面我们已经搭建好了hadoop环境,所以这里选择with out hadoop的版本。

配置config目录下有一个配置模板spark-env.sh.template:

将这个模板修改或者复制为spark-env.sh然后在里面:

export SPARK_DIST_CLASSPATH=${Hadoop的安装路径/bin classpath}

因为Spark只是个计算引擎,具体要去操作对应的分部署文件系统的,所以将Spark的类路径指向了hadoop。也就是通过这个配置将Spark要操作的数据源设置为了HDFS。

启动:

bin目录下:

./run-exmaple SparkPi

这是一个Spark自带的demo,如果跑起来不报错,说明就没什么问题了。

2.RDD操作

可以用Spark自带的Spark  shell来进行RDD操作:

./bin/spark-shell

RDD操作分为两类:

  • 转换,就是只是返回中间数据集的操作。
  • 动作,就是有具体单个返回值的操作。

map - 应用于RDD的每个元素,产生一个新的RDD。

val numbersRdd = spark.sparkContext.parallelize(Array(1, 2, 3, 4))
val squaredRdd = numbersRdd.map(x => x * x) 

filter - 根据函数条件过滤RDD中的元素。

val evenNumbersRdd = numbersRdd.filter(_ % 2 == 0)

flatMap - 对RDD中的每个元素应用函数并展平结果。

val wordsRdd = spark.sparkContext.textFile("hdfs://path/to/textfile.txt")
val wordsFlatMapped = wordsRdd.flatMap(line => line.split(" "))

mapPartitions - 对每个分区应用一个函数。

val incrementedRdd = numbersRdd.mapPartitions(iter => iter.map(x => x + 1))

union - 合并两个RDD。

val rdd1 = spark.sparkContext.parallelize(Array(1, 2))
val rdd2 = spark.sparkContext.parallelize(Array(3, 4))
val combinedRdd = rdd1.union(rdd2)

distinct - 返回RDD中不重复的元素。

val uniqueNumbers = numbersRdd.distinct()

join - 对两个键值对RDD进行内连接。

val rddA = spark.sparkContext.parallelize(Array((1, "a"), (2, "b")))
val rddB = spark.sparkContext.parallelize(Array((1, "x"), (3, "y")))
val joinedRdd = rddA.join(rddB)

reduce - 通过函数聚合RDD中的所有元素。

val sum = numbersRdd.reduce(_ + _)

collect - 返回RDD的所有元素到Driver作为数组。

val allElements = numbersRdd.collect()

count - 返回RDD中元素的数量。

val count = numbersRdd.count()

first - 返回RDD的第一个元素。

val firstElement = numbersRdd.first()

take(n) - 返回RDD的前n个元素。

val topThree = numbersRdd.take(3)

saveAsTextFile - 将RDD的内容保存为文本文件。

wordsRdd.saveAsTextFile("hdfs://path/to/output")

foreach - 对RDD的每个元素应用函数,常用于副作用操作。

numbersRdd.foreach(println)

3.JAVA编程示例

依赖:

<dependencies>
        <dependency> <!-- Spark dependency -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.4.0</version>
        </dependency>
    </dependencies>

 编码:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class WordCountFromHDFS {

    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("Usage: WordCountFromHDFS <input path>");
            System.exit(1);
        }

        // 初始化Spark配置
        SparkConf conf = new SparkConf().setAppName("WordCountFromHDFS").setMaster("local"); // 本地模式运行,根据实际情况可改为yarn等

        // 创建SparkContext实例
        JavaSparkContext sc = new JavaSparkContext(conf);

        // HDFS文件路径,这里直接从命令行参数获取
        String inputPath = args[0];

        // 从HDFS读取文件内容
        JavaRDD<String> lines = sc.textFile(inputPath);

        // 每行分割成单词,然后扁平化,最后统计每个单词出现的次数
        JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split("\\s+")).iterator());
        JavaPairRDD<String, Integer> wordCounts = words.mapToPair(word -> new Tuple2<>(word, 1))
                                                     .reduceByKey((a, b) -> a + b);

        // 收集结果并打印
        List<Tuple2<String, Integer>> results = wordCounts.collect();
        for (Tuple2<String, Integer> result : results) {
            System.out.println(result._1() + ": " + result._2());
        }

        // 停止SparkContext
        sc.stop();
    }
}

4.Spark SQL

park SQL是Spark的一个组件,它从Spark 1.3.0版本开始被引入,并在后续版本中不断得到增强和发展。Spark SQL允许用户使用SQL或者DataFrame API来处理结构化和半结构化的数据。下面做个小小的演示。

假设我们有一个CSV文件位于HDFS上,我们可以用以下命令加载它:

   val df = spark.read
     .option("header", "true")
     .csv("hdfs://localhost:9000/path/to/yourfile.csv")

创建临时视图:

   df.createOrReplaceTempView("my_table")

执行sql:

val result = spark.sql("SELECT column_name FROM my_table WHERE condition")

joinResult.show()

连表查询:

// 假设dfOrders和dfCustomers分别是orders和customers的DataFrame
dfOrders.createOrReplaceTempView("orders")
dfCustomers.createOrReplaceTempView("customers")

val joinResult = spark.sql(
  """
    SELECT orders.order_id, customers.customer_name
    FROM orders
    INNER JOIN customers
    ON orders.customer_id = customers.customer_id
  """
)

joinResult.show()

当然Spark SQL也有对应的JAVA API,支持编程的方式来操作,用到的时候查一下就是,此处就不展开了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1820512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P3388 【模板】割点(割顶)

题目背景 割点 题目描述 给出一个 n 个点&#xff0c;m 条边的无向图&#xff0c;求图的割点。 输入格式 第一行输入两个正整数 n,m。 下面 m 行每行输入两个正整数 x,y 表示 x 到 y 有一条边。 输出格式 第一行输出割点个数。 第二行按照节点编号从小到大输出节点&am…

实验五 网络中的树

文章目录 5.1 网络中的树第一关 认识树相关知识编程要求代码文件 第2关 根节点的二阶邻居求解方法相关知识编程要求代码文件 第3关 根节点的n阶邻居求解方法相关知识 5.2 权值矩阵与环&#xff08;无向网络&#xff09;第1关 无向网络的权值矩阵相关知识编程要求代码文件 第2关…

CrossOver 2024软件下载-CrossOver 2024详细安装教程

Crossover软件是一款可以在Mac、Linux和Chromebook上运行Windows程序的软件。 它是一款商业软件&#xff0c;由CodeWeavers公司开发&#xff0c;Crossover不是一个虚拟机或模拟器&#xff0c;它使用Wine技术来将Windows程序直接转换成可以在其他操作系统上运行的程序&#xff0…

基于SpringBoot3+Vue3宠物小程序宠物医院小程序的设计与实现

大家好&#xff0c;我是程序员小孟。 最近开发了一个宠物的小程序&#xff0c;含有详细的文档、源码、项目非常的不错&#xff01; 一&#xff0c;系统的技术栈 二&#xff0c;项目的部署教程 前端部署包&#xff1a;npm i 启动程序&#xff1a;npm run dev 注意事项&…

HSP_07章 排序和查找

P96_ 冒泡排序 排序的基本介绍 冒泡排序介绍 冒泡排序思路分析 代码 # 说明,如果只是完成排序功能,我们可以直接使用list的方法sort # 排序的列表 num_list[24,69,80,57,13,0,900,-1] print("排序前".center(32,"-")) print(f"num_list: {num_list}…

Ceph入门到精通-Bucket 生命周期的作用,新手该如何设置?

存储桶(Bucket)生命周期策略的作用主要是帮助存储管理员高效地管理对象的存储周期,包括对象的转换、存档和删除。以下是关于桶生命周期的作用和配置的概述: 一、桶生命周期的作用: 存储优化:通过将对象转换到更经济的存储类别,降低存储成本。 数据管理:自动删除不再需…

交换机简介

一、 集线器的替代品—交换机 使用集线器的缺点&#xff0c;因此就设计出了交换机来代替集线器&#xff0c;交换机常见端口数量一般有4、8、16、24、32等数量。 华为交换机&#xff1a;S5720-HI系列 仅从实物图上来看&#xff0c;交换机和集线器非常的像&#xff0c;但是它们的…

Python第二语言(十一、Python面向对象(下))

目录 1. 封装 1.1 私有成员&#xff1a;__成员、__成员方法 2. 继承&#xff1a;单继承、多继承 2.1 继承的基础语法 2.2 复写 & 子类使用父类成员 3. 变量的类型注解&#xff1a;给变量标识变量类型 3.1 为什么需要类型注解 3.2 类型注解 3.3 类型注解的语法 3.…

visio添加表格

插入Excel表格&#xff1a; 打开Microsoft Visio&#xff0c;新建一个空白画布。点击菜单栏中的“插入”。在插入中点击“图表”。在弹出的插入对象设置页面中选择“Microsoft Excel工作表”。点击确定按钮&#xff0c;然后在表格中输入内容。将鼠标点击到画布的空白处&#x…

大数据在商业中的应用——Kompas.ai如何助力企业决策

引言 在现代商业中&#xff0c;大数据逐渐成为企业决策的重要工具。通过对海量数据的分析和处理&#xff0c;企业可以获得重要的市场信息和决策支持。本文将探讨大数据在商业中的应用&#xff0c;并介绍Kompas.ai如何通过AI技术助力企业决策。 大数据的发展及其重要性 大数据…

迅狐跨境商城系统|全平台兼容|前端采用uni-app跨端框架,后端采用ThinkPHP5框架

高效实现全平台兼容的迅狐跨境商城系统 迅狐跨境商城系统是一款专为跨境电商企业设计的全平台兼容系统。其前端采用uni-app跨端框架&#xff0c;后端采用ThinkPHP5框架&#xff0c;旨在实现高效的开发和运营管理。 1. 全平台兼容的前端设计 迅狐跨境商城系统的前端采用uni-a…

MathType7.6永久免费功能强大的数学公式编辑器

亲爱的科技博主们&#xff0c;今天我要给大家种草一个神奇的工具——MathType 7.6&#xff01;&#x1f9ee;✨ 作为一名科技博主&#xff0c;我经常需要处理各种复杂的数学公式和符号。以前我总是为这个问题烦恼不已&#xff0c;但是自从我发现了MathType 7.6&#xff0c;一切…

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…

AVR晶体管测试仪开源项目编译

AVR晶体管测试仪开源项目编译 &#x1f4cd;原项目地址&#xff1a;https://github.com/Mikrocontroller-net/transistortester/tree/master&#x1f33f; https://github.com/svn2github/transistortester&#x1f33f; https://github.com/wagiminator/ATmega-Transistor-Tes…

python 只有ListNode类的情况下,创建链表和遍历链表

class ListNode:def __init__(self, val0, nextNone):self.val valself.next nextif __name__ __main__: linklist dummy ListNode() for x in ([2,4,3]): linklist .next ListNode(x) linklist linklist .nextwhile dummy:print(dummy.val)dummy dummy.next 这里的…

互联网应用主流框架整合之SpringMVC基础组件开发

多种传参方式 在前一篇文章互联网应用主流框架整合之SpringMVC初始化及各组件工作原理中讨论了最简单的参数传递&#xff0c;而实际情况要复杂的多&#xff0c;比如REST风格&#xff0c;它往往会将参数写入请求路径中&#xff0c;而不是以HTTP请求参数传递&#xff1b;比如查询…

云渲染动画:C4D如何正确渲染导出动画?

​C4D是一款功能强大的3D建模、动画和渲染软件&#xff0c;在制作动画时&#xff0c;正确的渲染和导出流程至关重要&#xff0c;以确保动画质量和流畅性。 帧率概念 动画就是一幅幅图片连贯起来&#xff0c;30帧/秒&#xff0c;就是一秒出现30张图片一般国外都是30&#xff0c…

2024年6.18有必要购买正版FL Studio21吗?

对于是否需要购买FL Studio的正版软件&#xff0c;我们认为强烈推荐用户购买正版软件&#xff0c;而不是使用盗版软件。 FL Studio 21是一款功能强大的音乐编曲制作软件。尽管你可能没有接触过音乐制作&#xff0c;也能通过fl Studio 21&#xff0c;撰写&#xff0c;整理&#…

3dmax在设计3D模型时闪退解决方法---模大狮模型网

3ds Max 在设计 3D 模型时闪退可能由多种原因造成&#xff0c;以下是一些常见的解决方法&#xff1a; 更新显卡驱动程序&#xff1a; 一个过时或不稳定的显卡驱动程序可能导致 3ds Max 闪退。请确保你的显卡驱动程序是最新版本&#xff0c;并且与 3ds Max 兼容。 关闭不必要的…

轻易云-轻企AI知识库的智能创作与个性化管理

随着人工智能技术的飞速发展&#xff0c;AI助手正逐渐成为我们生活和工作中不可或缺的伙伴。轻易云AI助理&#xff0c;作为这一领域的佼佼者&#xff0c;以其无所不知、无所不能的AI创作模型&#xff0c;为用户带来了前所未有的智能体验。 一、AI创作模型的丰富性 在轻易云AI助…