我正在处理不同的Spark DataFrames
,它在很多列中都有很多Null值。我想从每个列中获取任何一个非空值,以查看该值是否可以转换为datetime。
我尝试执行df.na.drop().first()
,希望它会删除所有带有空值的行,而剩下的DataFrame
,我只会得到包含所有非空值的第一行。但是,DataFrames
中的许多列都有很多具有大量空值的列,df.na.drop()
返回空DataFrame
。
我还尝试查找是否有任何列都具有所有null
值,以便我可以在尝试上述方法之前简单地删除这些列,但这仍然无法解决问题。任何想法如何以有效的方式完成此任务,因为此代码将在巨大的DataFrames
上运行多次?
答案 0 :(得分:3)
您可以将first
功能与ingoreNulls
一起使用。让我们说数据看起来像这样:
from pyspark.sql.types import StringType, StructType, StructField
schema = StructType([
StructField("x{}".format(i), StringType(), True) for i in range(3)
])
df = spark.createDataFrame(
[(None, "foo", "bar"), ("foo", None, "bar"), ("foo", "bar", None)],
schema
)
你可以:
from pyspark.sql.functions import first
df.select([first(x, ignorenulls=True).alias(x) for x in df.columns]).first()
Row(x0='foo', x1='foo', x2='bar')