删除缺少值由'?'表示的行

Gio*_*ous 1 scala missing-data apache-spark

我有一个.csv包含缺少值的行的文件.这些值代替null,由字符表示?.

如何删除包含至少一个具有值的列的行?,因为它df.na.drop()不起作用(因为缺少的值不是null)?

数据如下所示(我有35列 - 可以在任何列中找到缺失值)

+-------+--------+------+-------+
| col_1 | col_2  |  ... | col_35|
+-------+--------+------+-------+
| 0.75  |   ?    |  ... |   15  |
|   ?   | Helen  |  ... |   21  |
| -1.2  | George |  ... |    ?  |
|   ?   | Andrew |  ... |   129 |
| 0.12  | Maria  |  ... |   12  |   // Should not be deleted
+-------+--------+------+-------+
Run Code Online (Sandbox Code Playgroud)

这是读取文件的代码.

val df = sparkSession.read
    .format("com.databricks.spark.csv")
    .option("header", "true")
    .option("mode", "DROPMALFORMED")
    .load("data.csv")
    .toDF()
Run Code Online (Sandbox Code Playgroud)

use*_*411 5

如果?表示缺少值,您只需将阅读器配置为识别:

val df = spark.read
  .format("csv")
  .option("nullValue", "?")  // Use "?" as null character
  .option("header", "true")
  .option("mode", "DROPMALFORMED")
  .load("data.csv")
  .toDF()
Run Code Online (Sandbox Code Playgroud)

并使用标准na.drop:

df.na.drop
Run Code Online (Sandbox Code Playgroud)