Следующий фрагмент кода аннулирует коды длиной> 6, оставляя коды, соответствующие специальному списку, без изменений;в остальном, шаблон regex
удалит все начальные нули, сохранит 4 из следующих цифр и обрежет все оставшиеся конечные нули:
import org.apache.spark.sql.functions._
val df = Seq(
"541100", "54110", "05810", "581200", "58140",
"54110", "48140", "481400", "723000", "52000",
"0742", "0763", "001234", "123", "1234560"
).toDF("codes")
val specialList = Array("0742", "0763", "0780")
df.withColumn("strip_code", when(length($"codes") > 6, null).otherwise(
when($"codes".isin(specialList: _*), $"codes").otherwise(
regexp_replace($"codes", "^[0]*(\\d{4}.*?)[0]*$", "$1"))
)
).show
// +-------+----------+
// | codes|strip_code|
// +-------+----------+
// | 541100| 5411|
// | 54110| 5411|
// | 05810| 5810|
// | 581200| 5812|
// | 58140| 5814|
// | 54110| 5411|
// | 48140| 4814|
// | 481400| 4814|
// | 723000| 7230|
// | 52000| 5200|
// | 0742| 0742|
// | 0763| 0763|
// | 001234| 1234|
// | 123| 123|
// |1234560| null|
// +-------+----------+