PySpark df.na.drop()与df.dropna()的比较

b0zn9rqh  于 2023-03-01  发布在  Spark
关注(0)|答案(2)|浏览(311)

我想从PySpark df中删除任何列中有空值的行,但使用df.dropna()时运行时间非常长。使用df.na.drop()是否有性能优势?
我喜欢使用df.dropna(),因为我可以指定在哪些列中查找空值,但我发现它仍然非常慢( Dataframe 有数百万行,所以这可能是原因)...

wko9yo5t

wko9yo5t1#

根据spark官方文档,DataFrame.dropna()DataFrameNaFunctions.drop()是彼此的别名,所以理论上它们的效率应该是相等的。
此外,df.na.drop()还可以指定子集。

y53ybaqx

y53ybaqx2#

在PySpark中,df.na.drop()df.dropna()都可以用来从DataFrame中删除包含null或NaN值的行,但是这两种方法之间有细微的差别。
df.na.drop()DataFrameNaFunctions类的一个方法,允许您处理包含空值的列。它删除DataFrame中包含空值或NaN值的行。此方法返回删除了空值或NaN的新 Dataframe 。
示例:

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

data = [("John", 25), ("Mary", None), ("Dave", 30)]
schema = StructType([
  StructField("Name", StringType(), True),
  StructField("Age", IntegerType(), True)
])
df = spark.createDataFrame(data, schema)
df = df.na.drop()
df.show()

输出:

+----+---+
|Name|Age|
+----+---+
|John| 25|
|Dave| 30|
+----+---+

另一方面,df.dropna()是DataFrame类的一个方法,用于从DataFrame中删除具有任何null或NaN值的行。此方法返回一个删除了null或NaN的新 Dataframe 。
示例:

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

data = [("John", 25), ("Mary", None), ("Dave", 30)]
schema = StructType([
  StructField("Name", StringType(), True),
  StructField("Age", IntegerType(), True)
])
df = spark.createDataFrame(data, schema)
df = df.dropna()
df.show()

输出:

+----+---+
|Name|Age|
+----+---+
|John| 25|
|Dave| 30|
+----+---+

正如您所看到的,两种方法的结果是相同的。但是,df.na.drop()允许您指定要使用的列的子集,以及一行必须具有多少个非空值才能存储它。另一方面,df.dropna()只允许您删除具有任何空值或NaN值的行。并且不提供指定列的子集或非空值的数目的阈值的能力。

相关问题