📜  如何从 rdd 创建数据框 (1)

📅  最后修改于: 2023-12-03 14:51:46.310000             🧑  作者: Mango

如何从 RDD 创建数据框

在Spark中,RDD(弹性分布式数据集)是一种不可变的分布式数据集合。而数据框(DataFrame)则是一种基于RDD的分布式数据集合,类似于数据库中的表格形式。但是,数据框相比于RDD有更加强大的数据处理和查询能力。

在这篇文章中,我们将会介绍如何从RDD中创建数据框,并演示一些常用的操作方法。

创建RDD

首先,我们需要创建一个RDD。在这个示例中,我们将创建由一系列元组组成的RDD,每个元组包含一个人的姓名、年龄、性别和工资。

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("RDD to DataFrame").getOrCreate()

data_list = [("Alice", 25, "F", 5000), 
             ("Bob", 30, "M", 7000), 
             ("Charlie", 35, "M", 9000),
             ("David", 40, "M", 12000)]

data_rdd = spark.sparkContext.parallelize(data_list)
创建数据框

接下来,我们可以将RDD转化为数据框。Spark提供了一个特殊的方法createDataFrame()来创建数据框。该方法需要两个参数:第一个是RDD本身,第二个是数据框的模式。

from pyspark.sql.types import StructType, StructField, StringType, IntegerType

schema = StructType([
    StructField("Name", StringType(), True),
    StructField("Age", IntegerType(), True),
    StructField("Gender", StringType(), True),
    StructField("Salary", IntegerType(), True)
])

data_df = spark.createDataFrame(data_rdd, schema)

data_df.show()

执行以上代码,我们将得到以下输出:

+-------+---+------+------+
|   Name|Age|Gender|Salary|
+-------+---+------+------+
|  Alice| 25|     F|  5000|
|    Bob| 30|     M|  7000|
|Charlie| 35|     M|  9000|
|  David| 40|     M| 12000|
+-------+---+------+------+
数据框操作

现在我们已经将RDD转换成了数据框,可以开始使用各种数据处理和查询操作了。以下是一些常用的操作:

查看数据框的模式

使用printSchema()方法可以查看数据框的模式。

data_df.printSchema()

执行以上代码,我们将得到以下输出:

root
 |-- Name: string (nullable = true)
 |-- Age: integer (nullable = true)
 |-- Gender: string (nullable = true)
 |-- Salary: integer (nullable = true)
选择列

使用select()方法可以选取一列或多列。该方法需要传入列的名称。

data_df.select("Name", "Salary").show()

执行以上代码,我们将得到以下输出:

+-------+------+
|   Name|Salary|
+-------+------+
|  Alice|  5000|
|    Bob|  7000|
|Charlie|  9000|
|  David| 12000|
+-------+------+
过滤行

使用filter()方法可以根据某个条件过滤行。该方法需要传入一个布尔表达式。

data_df.filter(data_df.Age > 30).show()

执行以上代码,我们将得到以下输出:

+-------+---+------+------+
|   Name|Age|Gender|Salary|
+-------+---+------+------+
|Charlie| 35|     M|  9000|
|  David| 40|     M| 12000|
+-------+---+------+------+
分组汇总

使用groupBy()方法可以实现分组汇总,该方法需要传入分组的列名称。

data_df.groupBy("Gender").sum("Salary").show()

执行以上代码,我们将得到以下输出:

+------+-----------+
|Gender|sum(Salary)|
+------+-----------+
|     F|       5000|
|     M|      28000|
+------+-----------+
总结

在这篇文章中,我们介绍了从RDD创建数据框的方法。我们还演示了一些数据框的基本操作方法,包括查看模式、选取列、过滤行和分组汇总。熟练掌握这些操作将使您更加高效地进行数据处理和查询。