当前位置:   article > 正文

spark技术与应用方法

spark技术与应用方法

1.带你了解Scala基础

1. Scala简介:

  • Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。
  • 它由Martin Odersky于2003年创建,并于2004年首次发布。

2. 特性:

  • 静态类型:Scala是一种静态类型语言,意味着变量的类型在编译时就已确定,这有助于编写更安全和更健壮的代码。
  • 函数式编程:Scala支持函数作为一等公民,允许你使用高阶函数、不可变数据结构等函数式编程的概念。
  • 面向对象编程:Scala是一种纯面向对象的语言,每个值都是一个对象,同时也支持类、继承、多态等面向对象的概念。
  • 并发编程:Scala提供了Actor模型和基于Future/Promise的并发原语,使得并发编程更加容易和安全。
  • 表达式优先:在Scala中,几乎所有的构造都是表达式,这意味着它们都有返回值。

3. 基本语法:

  • 变量声明和赋值:使用val声明不可变变量,使用var声明可变变量。
     scala 

    Copy code

    val x: Int = 10 var y: String = "Hello"

  • 函数定义:可以使用def关键字定义函数。
     scala 

    Copy code

    def add(x: Int, y: Int): Int = { x + y }

  • 控制结构:Scala支持if-elseforwhile等常见的控制结构。
     scala 

    Copy code

    if (x > 0) { println("Positive") } else { println("Negative") } for (i <- 1 to 5) { println(i) }

4. 集合:

  • Scala提供了丰富的集合类,包括列表(List)、集合(Set)、映射(Map)等。
  • 这些集合类可以是可变的(mutable)或不可变的(immutable),不可变集合类是函数式编程的基础之一。

5. 模式匹配:

  • Scala的模式匹配是其强大特性之一,它可以用于解构数据结构、匹配各种模式等。
  • 可以用于match表达式、case类等。

6. 类和对象:

  • Scala是一种面向对象的语言,你可以使用class关键字定义类,使用object关键字定义单例对象。
  • Scala中的类可以有参数化的构造函数、成员变量、方法等。

7. Trait和混入:

  • Trait类似于Java中的接口,但可以包含实现。
  • 可以使用with关键字将Trait混入到类中。

8. 并发编程:

  • Scala提供了丰富的并发编程工具,包括基于Actor模型的Akka框架、Future/Promise等。
  • 这些工具使得编写并发和并行代码更加容易和安全。
if,for方法

在Scala中,可以使用if语句来判断条件,以及使用for循环来迭代集合等。下面是示例代码:

使用if判断条件:

  1. val x = 10
  2. if (x > 5) {
  3. println("x大于5")
  4. } else if (x == 5) {
  5. println("x等于5")
  6. } else {
  7. println("x小于5")
  8. }

使用for循环迭代集合:

  1. val numbers = Array(1, 2, 3, 4, 5)
  2. for (number <- numbers) {
  3. println(number)
  4. }
  5. // 使用条件过滤元素
  6. for (number <- numbers if number % 2 == 0) {
  7. println(number)
  8. }
  9. // 使用yield生成新的集合
  10. val evenNumbers = for (number <- numbers if number % 2 == 0) yield number
  11. println(evenNumbers.mkString(", "))

这些示例代码演示了Scala中使用if语句判断条件以及使用for循环迭代集合的基本用法。在实际开发中,还可以根据具体需求使用更多的条件和循环控制语句。

2.scala编程基础

1.创建RDD

要创建一个RDD(Resilient Distributed Dataset,弹性分布式数据集),你首先需要使用 SparkContext 对象来初始化。接下来,你可以从文件、内存中的集合或者其他数据源创建RDD。这里我将演示如何从文件中读取员工资料并创建RDD。

假设我们有一个文本文件 employees.txt,内容如下:

2.Scala创建RDD

3.创建对象

4.读取数据

5.打印内容

下面是用Scala创建RDD的示例代码:

在这个示例中,我们首先创建了一个 SparkConf 对象,指定了应用程序的名称和执行模式。然后使用该配置创建了一个 SparkContext 对象。接着使用 textFile 方法从文件中读取数据并创建RDD。最后,我们使用 foreach 方法打印了RDD中的每一行内容。

你需要确保文件路径是正确的,可以是本地文件系统路径或者HDFS路径,根据你的实际情况进行调整。

2.继续了解信息继,使用map,sortby,collect,faltmap,take等方法举例

3.方法举例

1.map()方法

2.sortby()方法

3.collect()方法

4.faltmap()方法

5.take()方法

3.继续使用unio方法合并然使用filiter,distinct方法过滤去重

6.union()方法合并RDD

7.filiter()方法

8.distinct()方法去重

4.将储存汇总后的员工工资为文本文件 

9、使用groupBy()agg()方法计算了每个职位的总工资

10.使用orderBy()方法对结果按总工资进行排序

11.将RDD转换为dataframe

12.将结果存为JSON,csv文件

本次示例中,我们使用了Scala来处理员工数据,并进行了以下操作:

  1. 读取了两个文本文件,每个文件包含了员工的姓名、职位和工资信息。
  2. 将文件中的数据转换为RDD,并使用union方法将两个RDD合并成一个RDD。
  3. 将合并后的RDD转换为DataFrame,并使用Spark SQL的DataFrame API进行数据处理。
  4. 使用groupByagg方法计算了每个职位的总工资。
  5. 使用orderBy方法对结果按总工资进行排序。
  6. 将结果保存为JSON文件和CSV文件,分别使用了write.jsonwrite.csv方法。

RDD的全称为Resilient Distributed Datasets,是Spark中的核心数据结构之一。RDD表示一个不可变的分布式对象集合,可以并行地处理和操作。RDD可以通过两种方式创建:

  1. 在内存中并行化集合(Parallelize):可以从一个已经存在的集合(例如,数组或者列表)中创建RDD。使用SparkContext的parallelize()方法,将集合作为参数传入即可。
  1. from pyspark import SparkContext
  2. sc = SparkContext("local", "example")
  3. data = [1, 2, 3, 4, 5]
  4. rdd = sc.parallelize(data)

  1. 通过外部数据源(External Data Sources):可以从外部数据源(例如,HDFS、本地文件系统等)中读取数据创建RDD。使用SparkContext的textFile()方法,将文件路径作为参数传入即可。
  1. from pyspark import SparkContext
  2. sc = SparkContext("local", "example")
  3. rdd = sc.textFile("input.txt")

这些方法创建的RDD是惰性计算的,也就是说,只有在遇到action操作时,才会真正进行计算。

3.spark sql---结构化数据文件处理

在很多情况下,开发工程师并不了解Scala语言,也不了解Spark常用API,但又非常想要使用Spark框架提供的强大的数据分析能力。Spark的开发工程师们考虑到了这个问题,利用SQL语言的语法简洁、学习门槛低以及在编程语言普及程度和流行程度高等诸多优势,从而开发了Spark SQL模块,通过Spark SQL,开发人员能够通过使用SQL语句,实现对结构化数据的处理。

Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象结构叫做DataFrame的数据模型(即带有Schema信息的RDD),Spark SQL作为分布式SQL查询引擎,让用户可以通过SQL、DataFrames API和Datasets API三种方式实现对结构化数据的处理。

Spark SQL主要提供了以下三个功能:

Spark SQL可从各种结构化数据源中读取数据,进行数据分析。

Spark SQL包含行业标准的JDBC和ODBC连接方式,因此它不局限于在Spark程序内使用SQL语句进行查询。

Spark SQL可以无缝地将SQL查询与Spark程序进行结合,它能够将结构化数据作为Spark中的分布式数据集(RDD)进行查询。

   创建DataFrame的两种基本方式: 已存在的RDD调用toDF()方法转换得到DataFrame。 通过Spark读取数据源直接创建DataFrame。

1.先配置好环境变量等2.创建export/data将文件导入

打开spark进入Scala

3.在进行导包

4.将RDD直接转换4.为DataFrame 改为为自己的名字

进行方法使用

5.show()方法

6.printSchema()方法

7.select()方法

8.filter()方法

9.groupby()方法

10.sortby()方法

11.然后进行创建DataFrame对象pzx和qxy

创立人员数据信息,使用where,filter,select等方法进行查询

11.where()方法

12.filter()方法

12.select()方法

4.sparkSQL总结

Spark SQL 提供了一种基于 SQL 的查询接口,用于在 Spark 中处理结构化数据。它构建在 Spark Core 之上,并提供了许多用于处理结构化数据的功能。以下是 Spark SQL 的总结:

1.DataFrame 和 Dataset: Spark SQL 提供了 DataFrame 和 Dataset 两种 API,它们提供了类似于关系型数据库的抽象,可以处理结构化数据。

2.SQL 查询: Spark SQL 支持使用标准的 SQL 查询语言进行数据查询和分析,可以直接在 DataFrame 或 Dataset 上执行 SQL 查询。

3.DataFrame API: Spark SQL 提供了 DataFrame API,它是一个分布式的数据集合,可以使用函数式编程风格对数据进行转换和操作。

4.数据源支持: Spark SQL 支持各种数据源,包括文本文件、JSON 文件、CSV 文件、Parquet 文件、Hive 表、JDBC 数据库等。

5.内置函数: Spark SQL 提供了丰富的内置函数,用于常见的数据转换、聚合计算、日期处理等操作。

6.UDF 和 UDAF: Spark SQL 支持用户自定义函数(UDF)和用户自定义聚合函数(UDAF),可以扩展 SQL 查询的功能。

7.性能优化: Spark SQL 提供了多种性能优化策略,包括谓词下推、列式存储、执行计划优化等,以提高查询的执行效率。

8.与其他组件集成: Spark SQL 与其他 Spark 生态系统的组件集成紧密,例如 Spark Streaming、MLlib、GraphX 等。

通过 Spark SQL,用户可以使用熟悉的 SQL 查询语言来处理大规模的结构化数据,同时利用 Spark 强大的分布式计算能力,适用于各种数据处理和分析场景。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/581386
推荐阅读
相关标签
  

闽ICP备14008679号