📜  Spark SQL-数据框(1)

📅  最后修改于: 2023-12-03 15:20:11.656000             🧑  作者: Mango

Spark SQL-数据框

Spark SQL是Apache Spark中的一个模块,它提供了一种在各种数据源中轻松进行分布式SQL查询的方式。其中,数据框是Spark SQL中的一个核心概念,它是以类似于关系型数据库的行和列形式组织的分布式数据集。

数据框可以看做是一个带有命名列的RDD,也可以看成是一张表格。Spark SQL中的数据框处理和操作和Pandas的DataFrames类似。

创建数据框

我们可以通过不同的方式来创建数据框,最常见的方式就是根据已有的RDD或者文件创建:

从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的数据框是一个非常强大的工具,它提供了丰富的操作,可以让我们轻松地处理和分析分布式数据集。在处理大规模数据时,我们可以使用数据框缓存和并行计算等技术,以提高处理性能和效率。