根据任何列的空值从数据框中删除记录

Drop records from dataframe based on the null present for any column

如何 select 仅具有 ID 的行没有包含空值的行。

  +---------+------+-----+
  |AccountID|  Name|Price|
  +---------+------+-----+
  |       11|miguel| null|
  |       11|luisa |   21|
  |       12|  hary|   90|
  |       13|  null|   99|
  |       14|  marg|   90|
  |       14|  null|   99|
  +---------+------+-----+

  DF.na.drop().show()

  +---------+------+-----+
  |AccountID|  Name|Price|
  +---------+------+-----+
  |       11|luisa |   21|
  |       12|  hary|   90|
  |       14|  marg|   90|
  +---------+------+-----+

na.drop() 删除了 DataFrame 的任何列上具有空值的所有行。我想知道如何删除其他具有 AccountID 11 的记录。 如果该特定 AccountID

的任何 column/records 中存在空值,则删除同一 AccountID 的所有记录

在这种情况下,输出应该仅为 AccountID 12。

因为 11 和 14 AccountID 的值为空值。

  +---------+------+-----+
  |AccountID|  Name|Price|
  +---------+------+-----+
  |       12|  hary|   90|
  +---------+------+-----+

试试 df.na.drop()

示例:

df.show()
//+---+----+----+
//| id|name|dept|
//+---+----+----+
//|  1|   a|null|
//|  2|null|   a|
//|  4|   d|   c|
//+---+----+----+

df.na.drop().show()
//+---+----+----+
//| id|name|dept|
//+---+----+----+
//|  4|   d|   c|
//+---+----+----+

df.na.drop() 接受

  • all(如果所有列值为空则删除)。
  • any(drop any column value is null) params.

df.na.drop("any").show()
//+---+----+----+
//| id|name|dept|
//+---+----+----+
//|  4|   d|   c|
//+---+----+----+

df.na.drop("all").show()
//+---+----+----+
//| id|name|dept|
//+---+----+----+
//|  1|   a|null|
//|  2|null|   a|
//|  4|   d|   c|
//+---+----+----+

为了解释你的问题,你想 select 仅具有 ID 的行没有包含空值的行。

// select rows which have a null
val idsWithNulls = DF.filter(col("Name").isNull || col("Price").isNull)
// based on those ids remove 'bad' ids
DF.join(idsWithNulls, Seq("AccountId"), "left_anti")

结果将是:

+---------+----+-----+
|AccountId|Name|Price|
+---------+----+-----+
|       12|hary|   90|
+---------+----+-----+