Nối thêm mà không trùng lặp python

Chức năng PySpark


+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
1 được sử dụng để thả/xóa các hàng trùng lặp [tất cả các cột] khỏi DataFrame và

+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
2 được sử dụng để thả các hàng dựa trên [một hoặc nhiều] cột đã chọn. Trong bài viết này, bạn sẽ tìm hiểu cách sử dụng các hàm differ[] và dropDuplicates[] với ví dụ PySpark

Trước khi bắt đầu, trước tiên hãy tạo một DataFrame với một số hàng và giá trị trùng lặp trên một vài cột. Chúng tôi sử dụng DataFrame này để trình bày cách lấy nhiều cột riêng biệt


# Import pySpark
from pyspark.sql import SparkSession
from pyspark.sql.functions import expr

# Create SparkSession
spark = SparkSession.builder.appName['SparkByExamples.com'].getOrCreate[]

# Prepare Data
data = [["James", "Sales", 3000], \
    ["Michael", "Sales", 4600], \
    ["Robert", "Sales", 4100], \
    ["Maria", "Finance", 3000], \
    ["James", "Sales", 3000], \
    ["Scott", "Finance", 3300], \
    ["Jen", "Finance", 3900], \
    ["Jeff", "Marketing", 3000], \
    ["Kumar", "Marketing", 2000], \
    ["Saif", "Sales", 4100] \
  ]

# Create DataFrame
columns= ["employee_name", "department", "salary"]
df = spark.createDataFrame[data = data, schema = columns]
df.printSchema[]
df.show[truncate=False]

Sản lượng dưới sản lượng


+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+

Trong bảng trên, bản ghi có tên nhà tuyển dụng


+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
0 có các hàng trùng lặp, Như bạn để ý, chúng tôi có 2 hàng có các giá trị trùng lặp trên tất cả các cột và chúng tôi có 4 hàng có các giá trị trùng lặp trên các cột

+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
1 và

+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
2

1. Nhận các hàng riêng biệt [Bằng cách so sánh tất cả các cột]

Trên DataFrame ở trên, chúng tôi có tổng cộng 10 hàng với 2 hàng có tất cả các giá trị trùng lặp, hoạt động khác biệt trên DataFrame này sẽ mang lại cho chúng tôi 9 sau khi xóa 1 hàng trùng lặp


distinctDF = df.distinct[]
print["Distinct count: "+str[distinctDF.count[]]]
distinctDF.show[truncate=False]

chức năng trên DataFrame trả về một DataFrame mới sau khi xóa các bản ghi trùng lặp. Ví dụ này mang lại đầu ra dưới đây


Distinct count: 9
+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Maria        |Finance   |3000  |
|Robert       |Sales     |4100  |
|Saif         |Sales     |4100  |
|Scott        |Finance   |3300  |
|Jeff         |Marketing |3000  |
|Jen          |Finance   |3900  |
|Kumar        |Marketing |2000  |
+-------------+----------+------+

Ngoài ra, bạn cũng có thể chạy hàm trả về DataFrame mới sau khi xóa các hàng trùng lặp


df2 = df.dropDuplicates[]
print["Distinct count: "+str[df2.count[]]]
df2.show[truncate=False]

2. PySpark Phân biệt nhiều cột được chọn

Tuy nhiên, PySpark không có một phương thức riêng biệt để lấy các cột sẽ chạy riêng biệt [bỏ các hàng trùng lặp trên nhiều cột đã chọn], tuy nhiên, nó cung cấp một chữ ký khác của hàm


+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
2 lấy nhiều cột để loại bỏ các bản sao

Lưu ý rằng việc gọi dropDuplicates[] trên DataFrame sẽ trả về một DataFrame mới với các hàng trùng lặp đã bị xóa

________số 8

Sản lượng dưới sản lượng. Nếu bạn để ý đầu ra, Nó đã bỏ 2 bản ghi trùng lặp


Distinct count of department & salary : 8
+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|Jen          |Finance   |3900  |
|Maria        |Finance   |3000  |
|Scott        |Finance   |3300  |
|Michael      |Sales     |4600  |
|Kumar        |Marketing |2000  |
|Robert       |Sales     |4100  |
|James        |Sales     |3000  |
|Jeff         |Marketing |3000  |
+-------------+----------+------+

3. Mã nguồn để có được các hàng riêng biệt


+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
0

Ví dụ hoàn chỉnh có sẵn tại GitHub để tham khảo

Phần kết luận

Trong bài viết PySpark SQL này, bạn đã học phương pháp


+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
1 được sử dụng để lấy các giá trị riêng biệt của các hàng [tất cả các cột] và cũng đã học cách sử dụng

+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+
2 để lấy giá trị riêng biệt và cuối cùng đã học cách sử dụng hàm dropDuplicates[] để phân biệt nhiều cột

Chủ Đề