Spark 1.5。 有一个静态数据集,其范围可以从几百MB到几GB(这里我放弃了广播数据集的选项 - 需要太多的内存)。 我有一个Spark Streaming输入,我想用来自该静态数据集的数据来丰富,提供一个公共密钥(我知道这可以通过使用DStream转换来应用RDD / PairRDD逻辑来完成)。关键基数很高,成千上万。
这里有我可以看到的选项:
我可以进行完全连接,我猜它在内存方面可以很好地扩展,但是如果数据太多必须在节点之间流动,则会产生问题。据我所知,通过相同的密钥对静态和输入RDD进行分区可能会有所回报。
我正在考虑将数据加载到Dataframe中,并且每次都从输入中查询它。这是否太过性能损失?我认为这不是一种正确的使用方式,除非流的基数低,对吧?
我的假设是否正确?那么,将分区的完全连接作为首选选项吗?