Trong PySpark DataFrame sử dụng when[]. other[] Các hàm SQL để tìm hiểu xem một cột có giá trị trống hay không và sử dụng phép biến đổi withColumn[] để thay thế giá trị của một cột hiện có. Trong bài viết này, tôi sẽ giải thích cách thay thế một giá trị trống bằng None/null
trên một cột duy nhất, tất cả các cột đã chọn danh sách các cột của DataFrame bằng các ví dụ về Python
Ghi chú. Trong PySpark DataFrame giá trị None
được hiển thị dưới dạng giá trị null
Có liên quan. Cách nhận Số lượng NULL, Giá trị chuỗi rỗng trong Khung dữ liệu PySpark
Hãy tạo một Khung dữ liệu PySpark với các giá trị trống trên một số hàng
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName['SparkByExamples.com'].getOrCreate[]
data = [["","CA"], ["Julia",""],["Robert",""],["","NJ"]]
df =spark.createDataFrame[data,["name","state"]]
df.show[]
#+------+-----+
#| name|state|
#+------+-----+
#| | CA|
#| Julia| |
#|Robert| |
#| | NJ|
#+------+-----+
PySpark Thay thế giá trị rỗng bằng Không có
Để thay thế giá trị trống bằng None/null
trên một cột DataFrame, bạn có thể sử dụng withColumn[] và when[]. nếu không[] chức năng
#Replace empty string with None value
from pyspark.sql.functions import col,when
df.withColumn["name", \
when[col["name"]=="" ,None] \
.otherwise[col["name"]]] \
.show[]
#+------+-----+
#| name|state|
#+------+-----+
#| null| CA|
#| Julia| |
#|Robert| |
#| null| NJ|
#+------+-----+
Thay thế giá trị trống bằng Không có trên tất cả các cột DataFrame
Để thay thế một giá trị trống bằng Không có/null trên tất cả các cột DataFrame, hãy sử dụng df.columns
để nhận tất cả các cột DataFrame, lặp qua điều này bằng cách áp dụng các điều kiện
#Replace empty string with None for all columns
from pyspark.sql.functions import col,when
df2=df.select[[when[col[c]=="",None].otherwise[col[c]].alias[c] for c in df.columns]]
df2.show[]
#+------+-----+
#| name|state|
#+------+-----+
#| null| CA|
#| Julia| null|
#|Robert| null|
#| null| NJ|
#+------+-----+
Thay thế Giá trị trống bằng Không có trên các cột đã chọn
Tương tự, bạn cũng có thể thay thế danh sách các cột đã chọn, chỉ định tất cả các cột bạn muốn thay thế trong danh sách và sử dụng danh sách này trên cùng một biểu thức ở trên
#Replace empty string with None on selected columns
from pyspark.sql.functions import col,when
replaceCols=["name","state"]
df2=df.select[[when[col[c]=="",None].otherwise[col[c]].alias[c] for c in replaceCols]]
df2.show[]
Hoàn thành ví dụ
Sau đây là một ví dụ hoàn chỉnh về việc thay thế giá trị trống bằng Không có
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName['SparkByExamples.com'].getOrCreate[]
data = [["","CA"], ["Julia",""],["Robert",""],["","NJ"]]
df =spark.createDataFrame[data,["name","state"]]
df.show[]
#Replace empty string with None
from pyspark.sql.functions import col,when
df.withColumn["name", \
when[col["name"]=="" ,None] \
.otherwise[col["name"]]] \
.show[]
#Replace empty string with None for all columns
df2=df.select[[when[col[c]=="",None].otherwise[col[c]].alias[c] for c in df.columns]]
df2.show[]
#Replace empty string with None on selected columns
replaceCols=["name","state"]
df2=df.select[[when[col[c]=="",None].otherwise[col[c]].alias[c] for c in replaceCols]]
df2.show[]
Phần kết luận
Tóm lại, bạn đã học cách thay thế các giá trị chuỗi trống bằng Không/null trên các cột Khung dữ liệu PySpark đơn, tất cả và được chọn bằng cách sử dụng ví dụ về Python
Dữ liệu JSON có khái niệm về các mảng và đối tượng rỗng và rỗng. Phần này giải thích cách mỗi khái niệm này được ánh xạ tới các khái niệm đối tượng dữ liệu là null và unset
giá trị null
JSON có một giá trị đặc biệt được gọi là null, giá trị này có thể được đặt trên bất kỳ loại dữ liệu nào bao gồm mảng, đối tượng, số và kiểu boolean
34 { Schema types
35 "id":null, [integer]
36 "firstName": null, [string]
37 "address": null, [Address complex type with maxOccurs = 1]
38 "homeAddresses":null [Address complex type with maxOccurs > 1]
39 "phoneNumbers": null [string with maxOccurs > 1]
40 }
Xem xét ví dụ trước trong đó dữ liệu JSON có giá trị null được phân tích cú pháp thành một đối tượng dữ liệu, điều sau đây là đúng
- id - Nếu thuộc tính được định nghĩa là không thể thực hiện được trong lược đồ, thì thuộc tính đó sẽ được đặt thành null. Nếu thuộc tính không được xác định là không thể thực hiện được, thì nó sẽ đưa ra một ngoại lệ
- firstName - Giá trị null được đặt trên thuộc tính
- địa chỉ - Nếu thuộc tính được định nghĩa là không thể thực hiện được trong lược đồ, thì thuộc tính đó sẽ được đặt thành null. Nếu thuộc tính không được xác định là không thể thực hiện được, thì nó sẽ đưa ra một ngoại lệ
- homeAddresses - Lược đồ không cho phép vô hiệu đối với thuộc tính này do đó nó sẽ không được đặt
- phoneNumbers - Thuộc tính này phải được xác định là không thể thực hiện được trong lược đồ nếu không nó sẽ đưa ra một ngoại lệ
Khi tuần tự hóa thành JSON, nếu một giá trị của thuộc tính trong đối tượng dữ liệu là null, thì nó sẽ được tuần tự hóa dưới dạng JSON null
Bỏ đặt thuộc tính
Không tồn tại thuộc tính từ dữ liệu JSON ánh xạ tới thuộc tính chưa đặt trong không gian đối tượng dữ liệu. Nếu thuộc tính trong đối tượng dữ liệu không được đặt [không đặt], thì thuộc tính sẽ không xuất hiện trong dữ liệu JSON
tài sản trống
Khái niệm rỗng JSON áp dụng cho mảng và đối tượng như hình bên dưới
41 {
42 "address":{}
43 "homeAddresses":[]
44 "phoneNumbers":[]
45 }
Trong trường hợp địa chỉ, một đối tượng dữ liệu địa chỉ trống được tạo. Đối tượng dữ liệu không có khái niệm về danh sách trống. Do đó, không có hành động nào được thực hiện trên đối tượng dữ liệu đối với hai thuộc tính đó