1

私は、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());
4

0 に答える 0