Spark总结

目录

1.从内部创建RDD

(1)文本文件:textFile

(2)Sequence文件:sequenceFile()

(3)对象文件(Object files)

(4)Hive表:sql() 函数

(5)JDBC连接

操作算子:

1.map()方法:

2.sortBy() 方法:

sortBy() 方法用于根据指定的标准对集合中的元素进行排序,并返回排序后的新集合。

3.collect() 方法:

4.flatMap()方法:

5.take()方法:

6.union()方法

7.filter()方法

8.distinct()方法

Spark SQL的简介

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

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

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

DataFrame概述

 1.DataFrame的创建

2.RDD直接转换为DataFrame


1.从内部创建RDD

(1)通过并行化集合

import org.apache.spark.{SparkConf, SparkContext}
 
val conf = new SparkConf().setAppName("ParallelizeExample").setMaster("local")
val sc = new SparkContext(conf)
 
val data = Array(1, 2, 3, 4, 5)
val rdd = sc.parallelize(data)
 
rdd.foreach(println)
 
sc.stop()

(2).makeRDD()创建

from pyspark import SparkContext
 
# 创建 SparkContext 对象
sc = SparkContext("local", "parallelize Example")
 
# 创建一个列表
data = [1, 2, 3, 4, 5]
 
# 使用 parallelize() 方法创建 RDD
rdd = sc.parallelize(data)
 
# 打印 RDD 中的元素
for element in rdd.collect():
    print(element)

2.从外部创建RDD

(1)文本文件:textFile
from pyspark import SparkContext
 
# 创建 SparkContext 对象
sc = SparkContext("local", "textFile Example")
 
# 读取文本文件
lines = sc.textFile("path/to/file.txt")
 
# 打印每一行
for line in lines.collect():
    print(line)
(2)Sequence文件:sequenceFile()
from pyspark import SparkContext
 
# 创建 SparkContext 对象
sc = SparkContext("local", "sequenceFile Example")
 
# 读取 SequenceFile 文件并创建 RDD
data = sc.sequenceFile("hdfs://path/to/sequence_file")
 
# 打印 RDD 中的元素
for key, value in data.collect():
    print(key, value)
(3)对象文件(Object files)
from pyspark import SparkContext
 
# 创建 SparkContext 对象
sc = SparkContext("local", "objectFile Example")
 
# 读取对象文件并创建 RDD
data = sc.objectFile("hdfs://path/to/object_file")
 
# 打印 RDD 中的元素
for obj in data.collect():
    print(obj)
(4)Hive表:sql() 函数
from pyspark.sql import SparkSession
 
# 创建 SparkSession 对象
spark = SparkSession.builder \
    .appName("SQL Example") \
    .getOrCreate()
 
# 创建 DataFrame
df = spark.createDataFrame([(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')], ["id", "name"])
 
# 注册临时表
df.createOrReplaceTempView("people")
 
# 执行 SQL 查询
result = spark.sql("SELECT * FROM people")
 
# 显示结果
result.show()
(5)JDBC连接
from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .appName("JDBC Example") \
    .config("spark.driver.extraClassPath", "path/tobc-driver.jar") \
    .getOrCreate()
 
 jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:postgresql://database_server:port/database_name") \
    .option("dbtable", "table_name") \
    .option("user", "username") \
    .option("password", "password") \
    .load()
jdbcDF.show()
spark.stop()

操作算子:

Scala集合提供了丰富的计算算子,用于实现集合/数组的计算,这些计算子一般针对于List、Array、Set、Map、Range、Vector、Iterator等都可以适用

1.map()方法:

map() 方法用于对集合(如列表、数组、映射等)中的每个元素应用一个函数,并返回结果的新集合。

val list = List(1, 2, 3, 4, 5)
val incremented = list.map(x => x + 1)
// incremented: List[Int] = List(2, 3, 4, 5, 6)
2.sortBy() 方法:
sortBy() 方法用于根据指定的标准对集合中的元素进行排序,并返回排序后的新集合。
val list = List(3, 1, 4, 1, 5, 9, 2, 6)
val sortedList = list.sortBy(x => x)
// sortedList: List[Int] = List(1, 1, 2, 3, 4, 5, 6, 9)
3.collect() 方法:

用于对集合中的元素进行筛选和转换,并返回符合条件的新集合。

val list = List(1, 2, 3, "four", 5.5, "six")
 
val transformedList = list.collect {
  case i: Int => i * 2  // 对于整数类型的元素,将其乘以2
}
 
// transformedList: List[Int] = List(2, 4, 6)
 
 
4.flatMap()方法:

flatMap() 方法是集合类(如列表、数组等)的常见操作之一,它结合了 map() 和 flatten() 两个操作,常用于在集合的元素上应用一个函数,并将结果展平成一个新的集合。

val list = List(1, 2, 3, 4)
val result = list.flatMap(x => List(x, x * 2))
 
// result: List[Int] = List(1, 2, 2, 4, 3, 6, 4, 8)
5.take()方法:

take() 方法用于从集合中获取指定数量的元素,返回一个新的集合。

val list = List(1, 2, 3, 4, 5)
 
// 取前3个元素
val result1 = list.take(3)
// result1: List[Int] = List(1, 2, 3)
 
// 对于空集合,take() 方法返回一个空集合
val emptyList = List.empty[Int]
val result2 = emptyList.take(3)
// result2: List[Int] = List()
 
// 如果指定的数量大于集合中的元素数量,将返回整个集合
val result3 = list.take(10)
// result3: List[Int] = List(1, 2, 3, 4, 5)
6.union()方法

是一种转换操作,用于将两个RDD合并成一个,不进行去重操作,而且两个RDD中每个元素中的值的个数、数据类型需要保持一致。代码如下

7.filter()方法

是一种转换操作,用于过滤RDD中的元素。需要一个参数,这个参数是一个用于过滤的函数,该函数的返回值为Boolean类型。将返回值为true的元素保留,将返回值为false的元素过滤掉,最后返回一个存储符合过滤条件的所有元素的新RDD。创建一个RDD,并且过滤掉每个元组第二个值小于等于1的元素

8.distinct()方法

Spark SQL的简介

1.可从各种结构化数据源中读取数据,进行数据分析。
2.包含行业标准的JDBC和ODBC连接方式,因此它不局限于在Spark程序内使用SQL语句进行查询。
3.可以无缝地将SQL查询与Spark程序进行结合,它能够将结构化数据作为Spark中的分布式数据集(RDD)进行查询。

DataFrame概述

 1.DataFrame的创建

我们通过Spark读取数据源的方式进行创建DataFrame

2.RDD直接转换为DataFrame

在Scala语言中使用Spark SQL进行操作时,通常会用到DataFrame API。以下是一个简单的例子,展示如何使用Scala语言结合Spark SQL创建DataFrame并执行SQL查询:

首先,确保你已经有了一个SparkSession实例,这是与Spark交互的主要入口点。

import org.apache.spark.sql.{Row, SparkSession}
 
import org.apache.spark.sql.types._
 
// 初始化SparkSession
 
val spark = SparkSession.builder()
 
  .appName("Spark SQL example")
 
  .getOrCreate()
 
import spark.implicits._
然后,定义一个schema来描述你的数据。例如,如果你有一个包含姓名、年龄和薪资的表,你可以这样定义schema:

val schema = StructType(Array(
 
  StructField("name", StringType),
 
  StructField("age", IntegerType),
 
  StructField("salary", DoubleType)
 
))
接下来,创建一个DataFrame。你可以手动创建Row实例,也可以从CSV文件或其他数据源加载数据:

// 手动创建Row实例
 
val rows = Array(
 
  Row("Alice", 30, 80000.0),
 
  Row("Bob", 25, 70000.0),
 
  Row("Charlie", 35, 95000.0)
 
)
 
// 创建DataFrame
 
val df = spark.createDataFrame(spark.sparkContext.parallelize(rows), schema)
 
现在你可以使用SQL来查询DataFrame了:
 
// 注册DataFrame为临时视图
 
df.createOrReplaceTempView("employees")
 
// 执行SQL查询
 
val results = spark.sql("SELECT * FROM employees WHERE age > 30")
 
// 显示查询结果
 
results.show()
 
//最后,不要忘记在结束时停止SparkSession:
 
 
 
spark.stop(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值