PySpark:获取数据框

时间:2017-05-09 17:58:39

标签: python apache-spark dataframe pyspark apache-spark-sql

我正在处理不同的Spark DataFrames,它在很多列中都有很多Null值。我想从每个列中获取任何一个非空值,以查看该值是否可以转换为datetime。

我尝试执行df.na.drop().first(),希望它会删除所有带有空值的行,而剩下的DataFrame,我只会得到包含所有非空值的第一行。但是,DataFrames中的许多列都有很多具有大量空值的列,df.na.drop()返回空DataFrame

我还尝试查找是否有任何列都具有所有null值,以便我可以在尝试上述方法之前简单地删除这些列,但这仍然无法解决问题。任何想法如何以有效的方式完成此任务,因为此代码将在巨大的DataFrames上运行多次?

1 个答案:

答案 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')