根据任何列的空值从数据框中删除记录
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|
+---------+----+-----+
如何 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|
+---------+----+-----+