目录
sortBy() 方法用于根据指定的标准对集合中的元素进行排序,并返回排序后的新集合。
2.包含行业标准的JDBC和ODBC连接方式,因此它不局限于在Spark程序内使用SQL语句进行查询。
3.可以无缝地将SQL查询与Spark程序进行结合,它能够将结构化数据作为Spark中的分布式数据集(RDD)进行查询。
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(