Отфильтруйте Spark DF по столбцу, имеющему только 2 знака после запятой, без использования round / floor - PullRequest
0 голосов
/ 27 марта 2019

У меня искра df, как показано ниже

+-----------+-------+-----+----+----+-------+----+----+-----+
|_c1        |_c2    |_c3  |_c4 |_c5 |_c6    |_c7 |_c8 |_c9  |
+-----------+-------+-----+----+----+-------+----+----+-----+
|10000000001|7982015|0.00 |0   |0.00|12.9912|0.00|1   |0.00 |
+-----------+-------+-----+----+----+-------+----+----+-----+

Я пытаюсь урезать значение столбца _c6 до 2 десятичных знаков и получаю его точно, для которого я не могу использовать округление / пол, поскольку они дают закрытые значения.

Есть ли способ выбрать первые два десятичных знака вместо округления до 12.99?

1 Ответ

1 голос
/ 27 марта 2019

Забавный способ сделать это - использовать regexp_extract, чтобы сохранить не более 2 цифр после десятичной дроби:

Seq(8989.09888, 22.1, 88, 345.111)
    .toDF("x")
    .select(regexp_extract('x, "[0-9]+(\\.[0-9]{1,2})?", 0) cast "double" as "x")
    .show
+-------+
|      x|
+-------+
|8989.09|
|   22.1|
|   88.0|
| 345.11|
+-------+

Обратите внимание, что мы обрабатываем все разные случаи (без десятичного числа, только один ...).

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