私は、spark によって実装されたラムダ アーキテクチャについていくつかの調査を行いました。以下の記事から、バッチ ビューとリアルタイム ビューをマージする方法が "realTimeView.unionAll(batchView).groupBy......" を使用していることがわかります。 batchView の背後にあるデータは非常に大きいため、そのような方法を使用するとパフォーマンスの問題が発生しませんか???
たとえば、batchView の背後にある行数が 100,000,000 の場合、クライアントがマージ ビューを要求するたびに Spark は 100,000,000 行をグループ化する必要がありますが、これは明らかに非常に低速です。
https://dzone.com/articles/lambda-architecture-with-apache-spark
DataFrame realTimeView = streamingService.getRealTimeView();
DataFrame batchView = servingService.getBatchView();
DataFrame mergedView = realTimeView.unionAll(batchView)
.groupBy(realTimeView.col(HASH_TAG.getValue()))
.sum(COUNT.getValue())
.orderBy(HASH_TAG.getValue());
List<Row> merged = mergedView.collectAsList();
return merged.stream()
.map(row -> new HashTagCount(row.getString(0), row.getLong(1)))
.collect(Collectors.toList());