📌  相关文章
📜  从 PySpark 中的数据框中删除重复项(1)

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

从 PySpark 中的数据框中删除重复项

在 PySpark 中,我们可以使用 dropDuplicates() 函数从 DataFrame 中删除重复项。该函数需要指定任意数量的列名作为重复项的参照列,将根据这些列的值来判断是否为重复项。以下是一个简单的例子:

from pyspark.sql.functions import col

# 创建一个简单的 DataFrame
data = [("Alice", 25), ("Bob", 30), ("Alice", 25)]
df = spark.createDataFrame(data, ["name", "age"])

# 按 name 和 age 列删除重复项
df = df.dropDuplicates(["name", "age"])

# 打印处理后的 DataFrame
df.show()

输出结果为:

+-----+---+
| name|age|
+-----+---+
|Alice| 25|
|  Bob| 30|
+-----+---+

在这个例子中,我们首先使用 createDataFrame() 函数创建了一个包含重复项的 DataFrame,然后使用 dropDuplicates() 函数指定了 nameage 两列作为重复项的参照列,并将结果存储到了一个新的 DataFrame 中。最后我们使用 show() 函数打印处理后的 DataFrame。

需要注意的是,dropDuplicates() 函数将返回一个新的 DataFrame,原始的 DataFrame 不会被修改。如果你想要修改原始的 DataFrame,你需要将结果重新赋值给原始的 DataFrame。

此外,dropDuplicates() 函数还接受一个可选参数 subset,用于指定参照列的集合。如果你有一个由列名字符串组成的列表,你可以将其传递给 subset 参数,而不是将每个列名作为单独的参数传递。以下是一个例子:

from pyspark.sql.functions import col

# 创建一个简单的 DataFrame
data = [("Alice", 25, "female"), ("Bob", 30, "male"), ("Alice", 25, "female")]
df = spark.createDataFrame(data, ["name", "age", "gender"])

# 按 name 和 age 列删除重复项
df = df.dropDuplicates(subset=["name", "age"])

# 打印处理后的 DataFrame
df.show()

输出结果为:

+-----+---+------+
| name|age|gender|
+-----+---+------+
|Alice| 25|female|
|  Bob| 30|  male|
+-----+---+------+

在这个例子中,我们使用了 subset 参数指定了参照列的集合。

希望这篇介绍对大家有所帮助,如有疑问或需要进一步了解 PySpark,请查阅 PySpark 文档或阅读相关书籍。