目录
(1).通过并行化集合(Parallelized Collections):
Spark提供了多种方式来读取外部存储系统中的数据,通过外部存储系统(如HDFS、HBase等)读取数据创建RDD基础方式有五种:
2.Sequence文件:sequenceFile() [扩充]
sortBy() 方法用于根据指定的标准对集合中的元素进行排序,并返回排序后的新集合。基本语法:
用于从集合中筛选出满足特定条件的元素,然后返回一个包含满足条件的元素的新集合。
用于获取两个RDD(弹性分布式数据集)之间的交集。基础代码示例:
spark常用方法总结:
一、从内部创建RDD
(1).通过并行化集合(Parallelized Collections):
可以使用SparkContext
的parallelize
方法将一个已有的集合转换为RDD。
基本语法:
parallelize(collection, numSlices=None)
基础代码示例:
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()创建
版本的 Spark 中,通常使用 parallelize()
方法来创建 RDD,这个方法与 makeRDD()
类似,都是用来从集合创建 RDD。
基本语法:
parallelize(collection, numSlices=None)
基础代码示例:
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)
效果展示:
二、从外部创建RDD
Spark提供了多种方式来读取外部存储系统中的数据,通过外部存储系统(如HDFS、HBase等)读取数据创建RDD基础方式有五种:
1.文本文件:textFile
textFile() 方法是 Apache Spark 中用于从文件系统中读取文本文件的函数
基本语法:
textFile(path, minPartitions=None, use_unicode=True)
基础代码示例:
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() [扩充]
sequenceFile() 方法用于在 Apache Spark 中读取 Hadoop SequenceFile 格式的文件,并将其作为 RDD 返回。SequenceFile 是 Hadoop 中一种常用的二进制文件格式,通常用于存储键-值对数据。
基本语法:
sequenceFile(path, keyClass=None, valueClass=None, keyConverter=None, valueConverter=None, minSplits=None, batchSize=0)
解释:
用法 | 解读 |
collection | 是要转换为 RDD 的集合,通常是一个列表 |
path | 要读取的 SequenceFile 文件的路径 |
keyClass | 键的类名(可选) |
valueClass | 值的类名(可选) |
keyConverter | 键的转换器(可选) |
valueConverter | 值的转换器(可选) |
minSplits | 最小分片数(可选) |
batchSize | 批处理大小(可选) |
基础代码示例:
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):
objectFile() 方法用于在 Apache Spark 中读取以序列化形式保存的对象文件,并将其作为 RDD 返回。这种文件格式通常用于将对象序列化为字节流,并存储在文件中,以便在后续操作中进行读取和处理。
基本语法:
objectFile(path, minPartitions=None, batchSize=0)
基础代码示例:
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() 函数
在Spark中配置了Hive支持,你可以使用 sql()
函数执行Hive查询并将结果作为RDD返回。sql()
方法是 SparkSession
类的一个成员方法,用于执行 SQL 查询并返回结果作为 DataFrame。sql()
方法可以让你直接在 Spark 中执行 SQL 查询,而不需要编写基于 RDD 的代码。
基本语法:
DataFrame = sql(sqlQuery)
基础代码示例:
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连接:
使用 jdbc()
函数来连接关系型数据库,并通过执行SQL查询来创建RDD。
基本语法:
jdbcDF = spark.read \
.jdbc(url="jdbc:postgresql:dbserver", table="schema.tablename",
properties={"user": "username", "password": "password"})
基础代码示例:
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() 方法用于对集合(如列表、数组、映射等)中的每个元素应用一个函数,并返回结果的新集合。
基本语法:
def map[B](f: (A) ⇒ B): List[B]
基础代码示例:
val list = List(1, 2, 3, 4, 5)
val incremented = list.map(x => x + 1)
// incremented: List[Int] = List(2, 3, 4, 5, 6)