Professional Documents
Culture Documents
Ôn Thi Cuối Kỳ Big Data
Ôn Thi Cuối Kỳ Big Data
Ôn Thi Cuối Kỳ Big Data
- Vẽ sơ dồ Mapreduce
Dữ liệu đầu vào -> Chia nhỏ dữ liệu -> Hàm Map -> Sắp xếp & Phân nhóm -> Hàm Reduce -
> Kết quả
Ảnh minh họa ( nếu đề kêu làm )
- Nguyên tắc hoạt động của Mapreduce
1. Chia nhỏ dữ liệu: Dữ liệu đầu vào được chia thành nhiều phần nhỏ hơn, gọi là các split.
2. Áp dụng hàm Map: Hàm Map được áp dụng cho từng split để tạo ra các cặp key-value.
3. Sắp xếp và phân nhóm: Các cặp key-value được sắp xếp theo key và phân nhóm lại dựa
trên key.
4. Áp dụng hàm Reduce: Hàm Reduce được áp dụng cho từng nhóm key-value để tạo ra kết
quả cuối cùng.
Câu 2: Cho trước collection orders, hãy trình bày (gọi hàm có sẵn của mongodb + vẽ lược đồ)
chi tiết các bước Map-Reduce để tính tổng (Array.sum(…)) số lượng (amount) hàng hóa đã mua
của khách hàng có trạng thái (status) là A
Giải
Cho trước Cơ sở dữ liệu được lưu trữ trong trong Hệ quản trị MongoDB như sau
db.orders.insertMany([
{ _id: 1, cust_id: "Ant O. Knee", ord_date: new Date("2024-05-01"), price: 25, items: [ { sku:
"oranges", qty: 5, price: 2.5 }, { sku: "apples", qty: 5, price: 2.5 } ], status: "A" },
{ _id: 2, cust_id: "Ant O. Knee", ord_date: new Date("2024-05-08"), price: 70, items: [ { sku:
"oranges", qty: 8, price: 2.5 }, { sku: "chocolates", qty: 5, price: 10 } ], status: "B" },
{ _id: 3, cust_id: "Busby Bee", ord_date: new Date("2024-05-08"), price: 50, items: [ { sku:
"oranges", qty: 10, price: 2.5 }, { sku: "pears", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 4, cust_id: "Busby Bee", ord_date: new Date("2024-05-18"), price: 25, items: [ { sku:
"oranges", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 5, cust_id: "Busby Bee", ord_date: new Date("2024-05-19"), price: 50, items: [ { sku:
"chocolates", qty: 5, price: 10 } ], status: "A"},
{ _id: 6, cust_id: "Cam Elot", ord_date: new Date("2024-05-19"), price: 35, items: [ { sku:
"carrots", qty: 10, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 7, cust_id: "Cam Elot", ord_date: new Date("2024-05-20"), price: 25, items: [ { sku:
"oranges", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 8, cust_id: "Don Quis", ord_date: new Date("2024-05-20"), price: 75, items: [ { sku:
"chocolates", qty: 5, price: 10 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 9, cust_id: "Don Quis", ord_date: new Date("2024-05-20"), price: 55, items: [ { sku:
"carrots", qty: 5, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 }, { sku: "oranges", qty: 10,
price: 2.5 } ], status: "A" },
{ _id: 10, cust_id: "Don Quis", ord_date: new Date("2024-05-23"), price: 25, items: [ { sku:
"oranges", qty: 10, price: 2.5 } ], status: "A" }
])
Câu 3: Sử dụng javascript, sinh viên hãy tự viết hàm map, hàm reduce để tính tổng giá tiền
(price) phải trả của mỗi khách hàng dựa vào cust_id của khách hàng. Sau đó, xuất kết quả
(map_reduce_result)và xếp thứ tự kết quả.
Giải
- Định nghĩa hàm map cho mỗi document đầu vào
var mapFunction = function() {
emit(this.cust_id, this.price);
};
- Định nghĩa hàm reduce với 2 arguments key là cust_id và values là price
var reduceFunction = function(cust_id, price) {
return Array.sum(price);
};
- Hiện thực map reduce cho tất cả documents của orders collection
db.orders.mapReduce(
mapFunction,
reduceFunction,
{ out: "map_reduce_results" }
)
Câu 5: Từ collection orders, hãy dùng hàm có sẵn của mongodb để tính tổng (Array.sum(…))
số tiền (price) mua hàng của mỗi khách hàng có trạng thái (status) là A và lưu kết quả trong
map_reduce_results collection và xuất kết quả có thứ tự
Giải
> db. orders.mapReduce(
function () {emit (this. cust_id, this. price);},
function (cust_id, price) {return Array.sum(price)}, {
query: {status: "A”},
out:" map_reduce_results "
}
)