Ví dụ (Python) sẽ làm cho câu hỏi của tôi rõ ràng. Hãy nói rằng tôi có một dataframe Spark lượng người đã xem phim nhất định vào những ngày nhất định, như sau:Tích lũy mảng từ các hàng trước đó (khung dữ liệu PySpark)
movierecord = spark.createDataFrame([("Alice", 1, ["Avatar"]),("Bob", 2, ["Fargo", "Tron"]),("Alice", 4, ["Babe"]), ("Alice", 6, ["Avatar", "Airplane"]), ("Alice", 7, ["Pulp Fiction"]), ("Bob", 9, ["Star Wars"])],["name","unixdate","movies"])
Giản đồ và dataframe xác định bởi giao diện trên như sau:
root
|-- name: string (nullable = true)
|-- unixdate: long (nullable = true)
|-- movies: array (nullable = true)
| |-- element: string (containsNull = true)
+-----+--------+------------------+
|name |unixdate|movies |
+-----+--------+------------------+
|Alice|1 |[Avatar] |
|Bob |2 |[Fargo, Tron] |
|Alice|4 |[Babe] |
|Alice|6 |[Avatar, Airplane]|
|Alice|7 |[Pulp Fiction] |
|Bob |9 |[Star Wars] |
+-----+--------+------------------+
tôi thích đi từ trên để tạo cột dữ liệu mới chứa tất cả trước đây phim được xem bởi mỗi người dùng, không trùng lặp ("trước đó" trên trường không trùng lặp). Vì vậy, nó sẽ trông như thế này:
+-----+--------+------------------+------------------------+
|name |unixdate|movies |previous_movies |
+-----+--------+------------------+------------------------+
|Alice|1 |[Avatar] |[] |
|Bob |2 |[Fargo, Tron] |[] |
|Alice|4 |[Babe] |[Avatar] |
|Alice|6 |[Avatar, Airplane]|[Avatar, Babe] |
|Alice|7 |[Pulp Fiction] |[Avatar, Babe, Airplane]|
|Bob |9 |[Star Wars] |[Fargo, Tron] |
+-----+--------+------------------+------------------------+
Làm thế nào để thực hiện điều này một cách hiệu quả?