Мне нужно преобразовать int datafield в nvarchar с ведущими нулями
пример:
a. 400 -> 00004.00
b. 6300 -> 00063.00
c. 6100 -> 00061.00
Используйте lpad
, чтобы добавить нули:
val df = Seq((400),(6300),(6100)).toDF("column")
val df2 = df.withColumn("varchar8", concat_ws(".", substring(lpad($"column", 7, "0"), 1, 5), lit("00")))
df2.show
+------+--------+
|column|varchar8|
+------+--------+
| 400|00004.00|
| 6300|00063.00|
| 6100|00061.00|
+------+--------+
varchar(8) — это тип данных в искровом скала
these datatypes should only used for parsing, and should NOT be used anywhere else. Any instance of these data types should be replaced by a StringType before analysis
spark.apache.org/docs/latest/api/java/org/apache/spark/sql/…@ user13748181 varchar нельзя использовать в фреймах данных. вам нужно использовать строки для их представления, как я сделал в своем коде.
Спасибо за ответ. Я ищу именно это решение.
можешь объяснить как ты это сделал
Используйте lpad, чтобы добавить нули, а затем добавьте .00
как мы можем преобразовать 47 в 00047.00
concat_ws(".", lpad($"column", 5, "0"), lit("00"))
Числовые (целые) значения должны быть отформатированы следующим образом: xxxxx.00 (слева заполняются нулями длины 5 + десятичная точка + 2 десятичных знака), тип данных будет varchar(8). Вот несколько примеров из приведенного ниже примера загрузки: a. 400 00004,00 б. 6300 00063,00 в. 6100 00061,00