Cuando la cadena de caracteres especificada contiene. carácter, el resultado será incorrecto. Tenga en cuenta que el tipo de datos de la columna first_specific_businessn_line_code es una cadena. Las siguientes dos declaraciones siempre muestran el mismo resultado.


 newData
  .withColumn("c",rtrim($"first_specific_businessn_line_code",".0"))
  .show(false)

 newData
  .withColumn("c",rtrim($"first_specific_businessn_line_code","\\.0"))
  .show(false)

+----------------------------------+---+
|first_specific_businessn_line_code|c  |
+----------------------------------+---+
|8.0                               |8  |
|80.0                              |8  |
+----------------------------------+---+

enter image description here

0
Hu.Cai 23 feb. 2021 a las 05:32

2 respuestas

La mejor respuesta

Eso no es un error. rtrim eliminará los caracteres que especifiquemos.

Consulte este enlace: función rtrim

Rtrim (80.0, ". 0") -> Esto eliminará. y 0 al final del valor de la columna. entonces el resultado es 8

Puede usar regexp_replace / regexp_extract para lograr el resultado.

val spark = SparkSession.builder().master("local[*]").getOrCreate()
spark.sparkContext.setLogLevel("OFF")
import spark.implicits._
import org.apache.spark.sql.functions._
Seq("8.0","80.0").toDF()
      .withColumn("regexp_replace",regexp_replace('value,"[.]\\d+",""))
      .withColumn("regexp_extract",regexp_extract('value,"(\\d+).(\\d+)",1))
      .show()

 /* output
 +-----+--------------+--------------+
 |value|regexp_replace|regexp_extract|
 +-----+--------------+--------------+
 |  8.0|             8|             8|
 | 80.0|            80|            80|
 +-----+--------------+--------------+

 */
2
Mohana B C 23 feb. 2021 a las 04:44

Puede usar regexp_replace para reemplazar .0 que aparece al final ($ en regex):

newData.withColumn("c", regexp_replace($"first_specific_businessn_line_code", "\\.0$", "")).show
+----------------------------------+---+
|first_specific_businessn_line_code|  c|
+----------------------------------+---+
|                               8.0|  8|
|                              80.0| 80|
+----------------------------------+---+
0
mck 23 feb. 2021 a las 07:07