2016-07-31 13 views
5

Câu hỏi: trong gấu trúc khi thả trùng lặp, bạn có thể chỉ định cột cần giữ. Có tương đương trong Spark Dataframes không?sao chép các dấu gạch ngang tia lửa và giữ đầu tiên

Pandas:

df.sort_values('actual_datetime', ascending=False).drop_duplicates(subset=['scheduled_datetime', 'flt_flightnumber'], keep='first') 

Spark dataframe (tôi sử dụng Spark 1.6.0) không có tùy chọn giữ

df.orderBy(['actual_datetime']).dropDuplicates(subset=['scheduled_datetime', 'flt_flightnumber']) 

Imagine 'scheduled_datetime' và 'flt_flightnumber' là cột 6, 17 . Bằng cách tạo phím dựa trên các giá trị của các cột này chúng ta cũng có thể deduplicate

def get_key(x): 
    return "{0}{1}".format(x[6],x[17]) 

df= df.map(lambda x: (get_key(x),x)).reduceByKey(lambda x,y: (x)) 

nhưng làm thế nào để xác định để giữ hàng đầu tiên và thoát khỏi các bản sao khác? Còn hàng cuối cùng thì sao?

+4

Khi bạn chạy 'dropDuplicates' bạn đang giữ hàng đầu tiên mỗi sự kết hợp cột xác định và loại bỏ phần còn lại của giá trị nhân bản. Bạn có chắc là mã của bạn chưa thực hiện những gì bạn muốn? –

+0

Tôi đã thử nghiệm và có vẻ như thực tế là như vậy. –

+0

Nhưng sau đó phải làm gì nếu tôi muốn giữ hàng cuối cùng? Tôi chỉ xem xét một cột cho các giá trị trùng lặp – hipoglucido

Trả lời

0

sử dụng dropDuplicates phương pháp theo mặc định nó giữ sự xuất hiện đầu tiên

Các vấn đề liên quan