簡體   English   中英

PySpark:獲取數據框中每列的第一個非空值

[英]PySpark: Get first Non-null value of each column in dataframe

我正在處理不同的 Spark DataFrames ,它們在許多列中有很多 Null 值。 我想從每一列中獲取任何一個非空值,以查看該值是否可以轉換為日期時間。

我嘗試執行df.na.drop().first()以希望它會刪除具有任何空值的所有行,而在剩余的DataFrame ,我將只獲取具有所有非空值的第一行。 但是許多DataFrames有很多包含大量空值的列,以至於df.na.drop()返回空DataFrame

我還嘗試查找是否有任何列都包含null值,以便我可以在嘗試上述方法之前簡單地刪除該列,但這仍然沒有解決問題。 知道如何以有效的方式完成此操作,因為此代碼將在巨大的DataFrames上運行多次?

您可以將first函數與ingorenulls一起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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM