Округление значения Double без десятичных точек в искровом датафрейме - PullRequest
0 голосов
/ 24 октября 2019

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

Ниже приведено значение столбца данных.

+-----+-----+
| SIG1| SIG2|
+-----+-----+
| 46.0| 46.0|
| 94.0| 46.0|

Схемадля столбца данных: как показано ниже.

scala> df.printSchema
root
 |-- SIG1: double (nullable = true)
 |-- SIG2: double (nullable = true)

Ожидаемый результат - как показано ниже

+-----+-----+
| SIG1| SIG2|
+-----+-----+
| 46  |   46|
| 94  |   46|

Я пробовал округлять столбец, как показано ниже согласно документу

+------------------------------------------------------------------+
|ReturnType| Signature     |                            Description|
+------------------------------------------------------------------+
|DOUBLE    |round(DOUBLE a)| Returns the rounded BIGINT value of a.|

используется код:

val df1 = df.withColumn("SIG1", round(col("SIG1"))).withColumn("SIG2", round(col("SIG2")))

Нужно ли преобразовывать столбец в int / bigint или это возможно с помощью самой функции round?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

round функция также возвращает двойные значения, поэтому, если вы хотите тип int, приведите его.

scala> Seq(1.9999,2.1234,3.6523).toDF().select(round('value,2)).show()
+---------------+
|round(value, 2)|
+---------------+
|            2.0|
|           2.12|
|           3.65|
+---------------+


scala> Seq(1.9999,2.1234,3.6523).toDF().select(round('value,0)).show()
+---------------+
|round(value, 0)|
+---------------+
|            2.0|
|            2.0|
|            4.0|
+---------------+


scala> Seq(1.9999,2.1234,3.6523).toDF().select(round('value)).show()
+---------------+
|round(value, 0)|
+---------------+
|            2.0|
|            2.0|
|            4.0|
+---------------+

scala> Seq(1.9999,2.1234,3.6523).toDF().select('value.cast("int")).show()
+-----+
|value|
+-----+
|    1|
|    2|
|    3|
+-----+
0 голосов
/ 24 октября 2019

Вам не нужно разыгрывать колонну. Если вы хотите избавиться от цифр после десятичной точки, вы можете использовать round(colName, 0).

...