Заполните пустые значения пустой строкой в ​​наборе данных <Row>, используя Apache-Spark в Java - PullRequest
0 голосов
/ 06 мая 2019

Пожалуйста, не отмечайте этот вопрос как дубликат.Я проверил приведенный ниже вопрос, и он дает решение для Python или Scala.И для Java метод отличается. Как заменить нулевые значения определенным значением в Dataframe, используя spark в Java?

У меня есть набор данных Dataset<Row> ds, который я создал из чтения файла паркета.Итак, все значения столбца являются строковыми.Некоторые значения являются нулевыми.Я использую .na (). Fill ("") для замены пустых значений пустой строкой

Dataset<Row>  ds1 = ds.na().fill("");

Но это не удаление нулевых значений.Я не могу понять, в чем может быть причина.

| - stopPrice: double (nullable = true) | - tradingCurrency: string (nullable = true)

1 Ответ

1 голос
/ 06 мая 2019

Из того, что я вижу, ваш столбец имеет числовой тип. Также вы не можете заменить нулевое значение недопустимым значением в Spark. Поэтому в вашем случае вы не можете использовать строку ("" в вашем случае). Вот пример, который иллюстрирует это:

Dataset<Row> df = spark.range(10)
    .select(col("id"),
             when(col("id").mod(2).equalTo(lit(0)), null )
                 .otherwise(col("id").cast("string")).as("string_col"),
             when(col("id").mod(2).equalTo(lit(0)), null )
                 .otherwise(col("id")).as("int_col"));

df.na().fill("").show();

А вот и результат

+---+----------+-------+
| id|string_col|int_col|
+---+----------+-------+
|  0|          |   null|
|  1|         1|      1|
|  2|          |   null|
|  3|         3|      3|
|  4|          |   null|
|  5|         5|      5|
|  6|          |   null|
|  7|         7|      7|
|  8|          |   null|
|  9|         9|      9|
+---+----------+-------+

Работает для строки, но не для целого числа. Обратите внимание, что я использовал функцию cast, чтобы превратить int в строку и заставить код работать. Это может быть хорошим решением в вашей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...