Tôi tạo RDD từ danh sách các url và sau đó thử tìm nạp dữ liệu với một số cuộc gọi http không đồng bộ. Tôi cần tất cả các kết quả trước khi thực hiện các phép tính khác. Lý tưởng nhất, tôi cần phải thực hiện cuộc gọi http trên các nút khác nhau để cân nhắc mở rộng quy mô.Công việc Spark với cuộc gọi HTTP Async
tôi đã làm một cái gì đó như thế này:
//init spark
val sparkContext = new SparkContext(conf)
val datas = Seq[String]("url1", "url2")
//create rdd
val rdd = sparkContext.parallelize[String](datas)
//httpCall return Future[String]
val requests = rdd.map((url: String) => httpCall(url))
//await all results (Future.sequence may be better)
val responses = requests.map(r => Await.result(r, 10.seconds))
//print responses
response.collect().foreach((s: String) => println(s))
//stop spark
sparkContext.stop()
Công việc này, nhưng Spark công việc không bao giờ kết thúc!
Vì vậy, tôi tự hỏi thực tiễn tốt nhất để xử lý tương lai bằng Spark (hoặc tương lai [RDD]) là gì.
Tôi nghĩ trường hợp sử dụng này có vẻ khá phổ biến nhưng chưa tìm thấy câu trả lời nào.
Trân trọng
Sự cố không nên có chuyển động dữ liệu giữa 'yêu cầu' và' phản hồi' để cả hai phép biến đổi phải được thực hiện trong cùng một giai đoạn, do đó cùng các thực thi và ngữ cảnh. – zero323