📅  最后修改于: 2023-12-03 15:20:11.656000             🧑  作者: Mango
Spark SQL是Apache Spark中的一个模块,它提供了一种在各种数据源中轻松进行分布式SQL查询的方式。其中,数据框是Spark SQL中的一个核心概念,它是以类似于关系型数据库的行和列形式组织的分布式数据集。
数据框可以看做是一个带有命名列的RDD,也可以看成是一张表格。Spark SQL中的数据框处理和操作和Pandas的DataFrames类似。
我们可以通过不同的方式来创建数据框,最常见的方式就是根据已有的RDD或者文件创建:
我们可以用SparkSession
来创建一个空的数据框,然后手动定义列名和列类型,最后将RDD的数据填充入数据框中。
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
# 定义数据结构
scheam = StructType([
StructField("id", IntegerType(), True),
StructField("name", StringType(), True),
StructField("age", IntegerType(), True)
])
# 定义数据
data = [(1, "Tom", 20), (2, "Jerry", 22), (3, "Mike", 25)]
# 创建RDD
rdd = spark.sparkContext.parallelize(data)
# 创建数据框
df = spark.createDataFrame(rdd, schema=scheam)
# 展示数据框
df.show()
我们也可以从文件中读取数据创建一个数据框:
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
# 从csv文件中读取数据
df = spark.read.csv("file_path.csv", header=True, inferSchema=True)
# 展示数据框
df.show()
我们可以对数据框进行各种操作,例如筛选、聚合、排序等。
我们可以使用filter()
方法对数据框进行筛选:
# 筛选年龄大于等于22岁的数据
df.filter(df.age >= 22).show()
我们可以使用groupBy()
和聚合函数对数据框进行聚合:
# 按照年龄分组并统计每组的个数
df.groupBy("age").count().show()
我们可以使用orderBy()
方法对数据框进行排序:
# 按照年龄和ID进行排序
df.orderBy(["age", "id"], ascending=[True, False]).show()
以上只是对数据框的一些简单操作,Spark SQL还提供了更丰富的高级操作,例如窗口函数、联结等。
对于较大的数据集,我们可以将数据框缓存到内存中,以便加速后续操作:
# 缓存数据框
df.cache()
我们可以使用write()
方法将数据框输出到文件:
# 输出到csv文件中
df.write.csv("file_path.csv", header=True, mode="overwrite")
Spark SQL的数据框是一个非常强大的工具,它提供了丰富的操作,可以让我们轻松地处理和分析分布式数据集。在处理大规模数据时,我们可以使用数据框缓存和并行计算等技术,以提高处理性能和效率。