Trong bài viết này, chúng ta sẽ tìm hiểu cách xóa các ký tự trừ chữ số khỏi một chuỗi trong Python
Cách tiếp cận đầu tiên là sử dụng câu lệnh if trong vòng lặp for và nối chúng bằng phương thức join[]. Ta sẽ lặp lại chuỗi bằng vòng lặp for sau đó sẽ kiểm tra từng ký tự có phải là chữ số hay không bằng câu lệnh if, nếu là chữ số thì chuyển sang ký tự tiếp theo, nếu không thì thay thế ký tự đó
Để lặp lại nhiều lần thông qua một chuỗi, hãy sử dụng vòng lặp for. Chức năng này giống như một phương thức lặp được thấy trong các ngôn ngữ lập trình hướng đối tượng khác và ít giống với từ khóa for được tìm thấy trong các ngôn ngữ lập trình khác. Vòng lặp for cho phép chúng ta chạy một loạt các hướng dẫn một lần cho từng phần tử của danh sách, bộ dữ liệu, bộ, v.v.
Ví dụ
Trong ví dụ dưới đây, chúng tôi đang lấy một chuỗi làm đầu vào và chúng tôi sẽ xóa tất cả các ký tự không phải là chữ số bằng cách sử dụng biểu thức chính quy và in chuỗi kết quả −
Vấn đề. Trong Spark, tôi có một cột chuỗi trên DataFrame và muốn kiểm tra xem cột chuỗi này có tất cả hoặc bất kỳ giá trị số nào không, tự hỏi liệu có bất kỳ hàm nào tương tự như hàm isNumeric trong các công cụ/ngôn ngữ khác không
Dung dịch. Kiểm tra cột chuỗi có tất cả các giá trị số
Thật không may, Spark không có hàm isNumeric[] do đó bạn cần sử dụng các hàm hiện có để kiểm tra xem cột chuỗi có tất cả hoặc bất kỳ giá trị số nào không. Bạn có thể muốn viết Spark UDF cho các tình huống như thế này nhưng không nên sử dụng UDF vì chúng không hoạt động tốt
Hãy tạo một DataFrame đơn giản với các cột số và chữ số cho ví dụ của chúng tôi
import spark.implicits._
val data = Seq[[1,"123456","123456"],
[2,"3456234","ABCD12345"],[3,"48973456","ABCDEFGH"]]
val df = data.toDF["id","all_numeric","alphanumeric"]
df.show[]
//+---+-----------+------------+
//| id|all_numeric|alphanumeric|
//+---+-----------+------------+
//| 1| 123456| 123456|
//| 2| 3456234| ABCD12345|
//| 3| 48973456| ABCDEFGH|
//+---+-----------+------------+
1. Cột kiểm tra tia lửa có giá trị số
Ví dụ dưới đây tạo một cột Boolean mới
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
2, cột này chứa
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
3 cho giá trị số và
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
0 cho giá trị không phải là số. Để làm được điều này mình đã thực hiện ép kiểu cột từ cột string sang int và kiểm tra kết quả ép kiểu là
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
1. hàm cast[] trả về null khi không thể truyền sang một loại cụ thể
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
2. Lọc các hàng chỉ có các giá trị số trong một cột
Bạn có thể sử dụng cách tiếp cận tương tự để lọc các hàng chỉ có giá trị số trên cột chuỗi. Ví dụ dưới đây kiểm tra các giá trị số trong cột
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
2 và trả về các bản ghi có giá trị số
//Filter rows that has numeric value on column
import org.apache.spark.sql.functions.{col}
df.filter[col["alphanumeric"]
.cast["int"].isNotNull
].show[]
//+---+-----------+------------+
//| id|all_numeric|alphanumeric|
//+---+-----------+------------+
//| 1| 123456| 123456|
//+---+-----------+------------+
Ngoài ra, bạn có thể sử dụng hàm
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
3 của lớp Cột để lọc các hàng có giá trị số trên một cột
df.filter[col["alphanumeric"]
.rlike["^[0-9]*$"]
].show[]
Và, bạn cũng có thể sử dụng mã bên dưới. Điều này cũng trả về cùng một đầu ra như trên
________số 83. Cột chuỗi kiểm tra PySpark có tất cả các giá trị số
Ví dụ PySpark để kiểm tra cột chuỗi DataFrame có tất cả các giá trị số
spark = SparkSession.builder.appName['SparkByExamples.com'].getOrCreate[]
data = [[1,"123456","123456"],
[2,"3456234","ABCD12345"],[3,"48973456","ABCDEFGH"]]
df = spark.createDataFrame[data = data, schema = ["id","all_numeric","alphanumeric"]]
df.show[]
from pyspark.sql.functions import col
df.select[col["all_numeric"],
col["all_numeric"].cast["int"].isNotNull[].alias["Value "]
].show[]
4. Hàng Bộ lọc PySpark chỉ có Giá trị Số
Lọc các hàng DataFrame chỉ có giá trị số trên PySpark DataFrame
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
05. Sử dụng biểu thức truy vấn SQL
import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
col["all_numeric"]
.cast["int"].isNotNull.alias["Value "]
].show[]
//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//| 123456| true|
//| 3456234| true|
//| 48973456| true|
//+-----------+------+
1Phần kết luận
Trong bài viết này, bạn đã học các ví dụ về Spark * PySpark về cách kiểm tra xem cột chuỗi DataFrame có giá trị số hay không và cách lọc các hàng chỉ có giá trị số