首页 人工智能元宇宙大数据 企业智能化 智慧城市 科技 商务
当前位置:首页 > 大数据

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

来源:服务器技术社区 发布日期:2024-07-10

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

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

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

1.下载安装

前置环境:

Hadoop 3.1.3Java 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编程示例

依赖:

org.apache.spark

spark-core_2.11

2.4.0

编码:

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 ");

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 lines = sc.textFile(inputPath);

// 每行分割成单词,然后扁平化,最后统计每个单词出现的次数

JavaRDD words = lines.flatMap(line -> Arrays.asList(line.split("s+")).iterator());

JavaPairRDD wordCounts = words.mapToPair(word -> new Tuple2<>(word, 1))

.reduceByKey((a, b) -> a + b);

// 收集结果并打印

List> results = wordCounts.collect();

for (Tuple2 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_nameFROM ordersINNER JOIN customersON orders.customer_id = customers.customer_id""" )

joinResult.show()

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

以下是在Windows 10 64位系统下面进行的操作。

使用的语言以及版本是Python 2.7。

JDK版本是 JDK1.8。下载SparkSpark的下载地址为:https://archive.apache.org/dist/spark/

在这个里面可以选择你自己想要的版本。

我下载的是spark-1.6.0-bin-hadoop2.6.tgz

注:在Spark1.4起增加

Transformation(转换):表示是针对RDD中数据的转换操作,主要会针对已有的RDD创建一个新的RDD:常见的有map、flatMap、filter等等。Action(执行)表示是触发任务执行的操作,主要对RDD进行最后的操作,比如遍历、reduce、保存到文件等,并且还可以把结果返回给Driver程序。使用例子SparkRdd.java。(数据源)中的元素应用一个函数。(分布式数据集),它由每个。(分布式数据集),它由每个。(数据源)中应用一个函数。上执行聚合操作(例如,Meaning(含义)

选择package type为Source Code,随后下载spark-2.4.4.tgz

为了与学习一致,这里选择spark-2.1.0,故需要maven3.3.9及以上版本,java7及以上版本

Spark源码编译

注意:这里之所以选...

目录Centos7下Spark安装第一步:软件下载或编译第二步:安装软件(1)上传文件(2)解压文件第三步:Spark的本地模式运行测试第四步:Spark服务WEB监控页面

Centos7下Spark安装

电脑系统:macOS 10.15.4

虚拟机软件:Parallels Desktop14

操作系统:CentOS 7

JDK版本:jdk1.8.0_162

Hadoop版本:hadoop-2.6.0-cdh5.9.3

Scala版本:scala-2.12.8

Spark版本:spark-2.4.6-bi

下载编译了Hive的Spark版本

官网下载链接给出的都是编译过Hive的(至少1.6版可以确定是)。CDH自带的Spark都是没有带Hive的,若直接运行./spark-sql,会报错如下Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.cli.CliDriverat java.net.URLCl

   在spark官方文档上给出了几种保存数据至数据库的方式,在字段确定时使用非常方便,代码如下:

##读取数据

val jdbcDF = spark.read

.format("jdbc")

.option("url", "jdbc:postgresql:dbserver")

.option("dbtable", "schema.tablename")

使用命令./bin/spark-shell启动spark 图2启动spark 2.Spark读取文件系统的数据 (1)在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数; 图3 spark统计行数 (2)在spark-...

在后续的学习和实践中,你还可以探索更多Spark的高级特性,如RDD(弹性分布式数据集)、DataFrame、Spark SQL等,以及如何利用Spark Streaming进行实时数据处理,进一步提升你的大数据处理能力。

- **Spark API for Java**:Spark提供了丰富的Java API,允许开发者使用Java编写Spark应用程序。尽管Scala是Spark的原生语言,但Java API同样强大且功能完备。- **SparkContext**:Java应用中的入口点,用于创建...

- **Spark SQL**:Spark的SQL模块,支持SQL查询和DataFrame/Dataset API,使得SQL与Scala/Java/Python API无缝对接。- **Spark Streaming**:处理实时数据流,通过微批处理实现高吞吐量和低延迟的数据处理。- *...

首先,Java是一种广泛使用的编程语言,尤其在大数据领域,它的跨平台特性和丰富的库使其成为开发工具的首选。在大数据处理中,Java常用于编写MapReduce作业和Spark应用程序。Spark是Apache软件基金会的一个开源...

结果中,对于每一行的last_value的结果都是当前值,并不分区中按salary升序的最后一个值。前面在提到last_value时,特意强调了该函数的结果并不是分区中的最后一个值,结合上述介绍的window specification再来看下该函数的结果值。注意,默认情况下last_value取的是第一行截止到当前行的最后一个值(当前行的值),并不是整个分区中排序后的最后一个值。注意,如果order by的结果相同,则rank得到的结果都相同,在这里的语义是排序结果相同,因此等级编号也相同。

在当今这个信息爆炸的时代,企业如何高效地管理、传播与利用知识,已成为衡量其竞争力的重要标尺。知识库,作为这一背景下的产物,正逐步成为企业不可或缺的数字资产。它不仅是一个自助式的数字门户,更是连接员工、客户与知识的桥梁,其重要性不容忽视。

大数据基础环境准备SSH免密码连接安装配置JDK安装配置Scala无项目开发测试环境为分布式集群环境,在当前项目中使用多台基于CentOS 64bit 的虚拟机来模拟生产环境。

大数据开发工程师系列是指专门从事大数据开发的一类职业。Hadoop和Spark是大数据领域中最受欢迎的两个开源框架。

Hadoop是一个分布式计算框架,用于处理大规模数据集的分布式存储和计算。Hadoop的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分布存储在集群的多个节点上,MapReduce可以并行处理这些分布式数据。Hadoop具有高可靠性、高扩展性和高容错性的特点,并且还提供了许多其他工具和库,如Hive、Pig和HBase等。

Spark是一个快速、通用的大数据处理引擎,可以在多种数据源上进行高效的分布式计算。相比于Hadoop的MapReduce,Spark具有更快的数据处理速度和更强的扩展性。Spark提供了一个称为弹性分布式数据集(RDD)的抽象,可以在内存中高效地处理大规模数据集。此外,Spark还提供了许多高级组件和库,如Spark SQL、Spark Streaming和MLlib等,用于处理结构化数据、流式数据和机器学习。

作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop可以处理海量数据,并且具有高可靠性和容错性。而Spark则能够快速高效地处理大规模数据,并提供了更多的数据处理和分析功能。

大数据开发工程师需要熟悉Hadoop和Spark的使用和调优技巧,以及相关的编程语言和工具,如Java、Scala和Python。他们需要了解数据处理的算法和模型,并能够设计和实现高效的分布式计算方案。此外,大数据开发工程师还需要具备良好的沟通能力和团队合作能力,能够与数据科学家和业务团队紧密合作,共同解决实际问题。

总之,大数据开发工程师系列是一个专门从事大数据开发的职业群体。而Hadoop和Spark则是这个职业群体中最重要的两个工具,他们分别用于大规模数据处理和分布式计算。掌握Hadoop和Spark的使用和优化技巧,是成为一名优秀的大数据开发工程师的关键能力。

### 回答2:

大数据开发工程师系列主要涉及到两个重要的技术:Hadoop和Spark。

Hadoop是一个开源的分布式计算框架,主要用于存储和处理大规模数据集。它通过将数据分散存储在集群中的多个节点上,并在节点之间进行数据通信和计算,实现了数据的并行处理和高可靠性。Hadoop的核心工具是HDFS(Hadoop分布式文件系统)和MapReduce(一种用于分布式计算的编程模型)。HDFS用于将数据分布式存储在集群中,而MapReduce则是用于分布式计算的框架,通过将计算任务分解成多个小任务并在各个节点上并行执行,大大提高了数据处理的效率和性能。

Spark是当前最受欢迎的大数据计算框架之一,也是一个开源项目。与Hadoop相比,Spark具有更快的数据处理速度和更强大的功能。Spark提供了一个可扩展的分布式数据处理框架,支持数据处理、机器学习、图计算等多种大数据应用场景。与传统的基于磁盘的计算框架相比,Spark利用内存计算的优势,可以快速地对大规模数据进行处理和分析。此外,Spark还提供了丰富的API和开发工具,使开发人员可以更轻松地构建和调试大数据应用程序。

作为大数据开发工程师,掌握Hadoop和Spark是必不可少的。熟悉Hadoop的使用和原理,能够有效地存储和处理大规模数据集。而对于Spark的掌握,则可以提高数据处理的速度和效率,使得大数据分析和挖掘更加容易实现。因此,大数据开发工程师需要具备对Hadoop和Spark的深入理解和熟练应用,同时还需要具备数据分析、算法和编程等多方面的技能,以应对复杂的大数据挑战。

### 回答3:

大数据开发工程师是一个专注于处理大数据的职位,主要负责使用各种工具和技术来处理和分析大规模的数据集。

Hadoop和Spark是目前在大数据处理领域中非常流行的两个开源工具。Hadoop是一个分布式系统基础架构,可以在集群中存储和处理大规模数据。它的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分散存储在集群的不同节点上,而MapReduce模型则提供了一种并行处理数据的方式。大数据开发工程师需要熟悉Hadoop的架构和命令行工具,能够编写MapReduce程序来处理数据。

Spark是一个快速和通用的大数据处理引擎,可以在大规模集群上执行数据处理任务。它拥有比Hadoop更高的性能和更丰富的功能。Spark提供了强大的机器学习、图计算和流处理等功能。大数据开发工程师需要熟悉Spark的API和编程模型,能够使用Spark的各种组建和工具进行数据处理和分析。

作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop和Spark可以有效地处理大规模数据,提取有价值的信息。大数据开发工程师通过编写和优化MapReduce程序来实现数据处理的需求,同时也能利用Spark提供的机器学习和流处理等功能来进行更复杂的数据分析。通过合理地使用Hadoop和Spark,大数据开发工程师可以减少数据处理的时间和成本,提高数据处理的效率和准确性。

luj_1768:

期待你能仔细梳理与锁有关的内容,出一个专题文案。锁是软件基础知识,又是很难降解的头疼根源之一。按你现在所学,是有可能完成锁有关的工作的。前面的贴子希望你能仔细想想。工作只有完成和未完成两种状态,完成了、头疼会减轻很多,没完成、就是过一段时间就头疼到发慌、去不了根。好自为之。