末尾のゼロの値を削除する必要がありますが、値の最終的な長さを4に保つ必要もあります。
+--------+
|codes |
+--------+
| 541100|
| 54100 |
| 05810 |
| 581200|
| 58140 |
| 54110 |
| 48140 |
| 481400|
| 723000 |
| 52000 |
+--------+
以下の行は、すべての後続ゼロをトリミングしています。長さが4を維持していることを確認するにはどうすればよいですか。
df.withColumn("strip_codes", regexp_replace(col("codes"), "^([0]+(?!$))|0*$", ""))
また、05810
末尾のゼロの正規表現に一致する値を無視したいo / p DF
+--------+
|strip_codes |
+--------
| 5411|
| 5410|
| 05810|
| 5812|
| 5814|
| 5411|
| 4814|
| 4814|
| 7230|
| 5200|
+--------+
既存の正規表現にどのような変更を加える必要がありますか。
次のスニペットは、長さが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|
// +-------+----------+
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加