📅  最后修改于: 2023-12-03 14:52:01.255000             🧑  作者: Mango
在 PySpark 中,DataFrame 是一种高级数据结构,用于处理结构化数据。当我们需要从数据框中获取不同的行时,PySpark 提供了一些强大的函数和方法来实现这个目标。本文将介绍如何使用 PySpark 在数据框中获取不同的行。
PySpark 提供了几种方法来获取不同的行,常用的方法有:
distinct()
方法:该方法用于获取数据框中的唯一行。它基于所有列的值对数据进行比较,并返回唯一的行。示例代码如下:df_distinct = df.distinct()
dropDuplicates()
方法:该方法用于获取数据框中的唯一行。与 distinct()
方法不同的是,dropDuplicates()
方法可以指定按照哪些列进行去重。示例代码如下:df_distinct = df.dropDuplicates(['col1', 'col2'])
filter()
方法:该方法用于根据给定的条件获取数据框中的行。可以使用表达式、函数或 SQL 表达式作为过滤条件。示例代码如下:df_filtered = df.filter(df['col1'] > 5)
df.createOrReplaceTempView('my_table')
df_filtered = spark.sql("SELECT * FROM my_table WHERE col1 > 5")
下面是一个完整的示例,演示如何在 PySpark 中获取不同的行:
from pyspark.sql import SparkSession
# 创建 SparkSession
spark = SparkSession.builder.appName("DistinctRows").getOrCreate()
# 创建示例数据
data = [('Alice', 25), ('Bob', 30), ('Alice', 25)]
df = spark.createDataFrame(data, ['name', 'age'])
# 获取唯一行
df_distinct = df.distinct()
# 按照指定列获取唯一行
df_distinct2 = df.dropDuplicates(['name'])
# 根据条件过滤行
df_filtered = df.filter(df['age'] > 25)
# 将数据框注册为临时表,使用 SQL 语句获取行
df.createOrReplaceTempView('my_table')
df_filtered2 = spark.sql("SELECT * FROM my_table WHERE age > 25")
# 打印结果
df_distinct.show()
df_distinct2.show()
df_filtered.show()
df_filtered2.show()
# 关闭 SparkSession
spark.stop()
运行以上代码将输出如下结果:
+-----+---+
| name|age|
+-----+---+
| Bob| 30|
|Alice| 25|
+-----+---+
+-----+---+
| name|age|
+-----+---+
| Bob| 30|
|Alice| 25|
+-----+---+
+----+---+
|name|age|
+----+---+
| Bob| 30|
+----+---+
+-----+---+
| name|age|
+-----+---+
| Bob| 30|
+-----+---+
在以上示例中,首先创建了一个包含重复行的数据框。然后,使用不同的方法获取不同的行,包括 distinct()
方法、dropDuplicates()
方法、filter()
方法以及使用 SQL 语句。最后,将结果打印出来。
PySpark 提供了多种方法来获取数据框中的不同行,包括使用 distinct()
方法、dropDuplicates()
方法、filter()
方法以及使用 SQL 语句。根据具体的需求,选择合适的方法来获取不同的行,并进行相应的处理或分析。