我想从PySpark df中删除任何列中有空值的行,但使用df.dropna()时运行时间非常长。使用df.na.drop()是否有性能优势?我喜欢使用df.dropna(),因为我可以指定在哪些列中查找空值,但我发现它仍然非常慢( Dataframe 有数百万行,所以这可能是原因)...
df.dropna()
df.na.drop()
wko9yo5t1#
根据spark官方文档,DataFrame.dropna()和DataFrameNaFunctions.drop()是彼此的别名,所以理论上它们的效率应该是相等的。此外,df.na.drop()还可以指定子集。
DataFrame.dropna()
DataFrameNaFunctions.drop()
y53ybaqx2#
在PySpark中,df.na.drop()和df.dropna()都可以用来从DataFrame中删除包含null或NaN值的行,但是这两种方法之间有细微的差别。df.na.drop()是DataFrameNaFunctions类的一个方法,允许您处理包含空值的列。它删除DataFrame中包含空值或NaN值的行。此方法返回删除了空值或NaN的新 Dataframe 。示例:
DataFrameNaFunctions
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()
正如您所看到的,两种方法的结果是相同的。但是,df.na.drop()允许您指定要使用的列的子集,以及一行必须具有多少个非空值才能存储它。另一方面,df.dropna()只允许您删除具有任何空值或NaN值的行。并且不提供指定列的子集或非空值的数目的阈值的能力。
2条答案
按热度按时间wko9yo5t1#
根据spark官方文档,
DataFrame.dropna()
和DataFrameNaFunctions.drop()
是彼此的别名,所以理论上它们的效率应该是相等的。此外,df.na.drop()还可以指定子集。
y53ybaqx2#
在PySpark中,
df.na.drop()
和df.dropna()
都可以用来从DataFrame中删除包含null或NaN值的行,但是这两种方法之间有细微的差别。df.na.drop()
是DataFrameNaFunctions
类的一个方法,允许您处理包含空值的列。它删除DataFrame中包含空值或NaN值的行。此方法返回删除了空值或NaN的新 Dataframe 。示例:
输出:
另一方面,
df.dropna()
是DataFrame类的一个方法,用于从DataFrame中删除具有任何null或NaN值的行。此方法返回一个删除了null或NaN的新 Dataframe 。示例:
输出:
正如您所看到的,两种方法的结果是相同的。但是,
df.na.drop()
允许您指定要使用的列的子集,以及一行必须具有多少个非空值才能存储它。另一方面,df.dropna()
只允许您删除具有任何空值或NaN值的行。并且不提供指定列的子集或非空值的数目的阈值的能力。