首页 > 解决方案 > Spark 使用的理想表结构是什么(高与宽)?

问题描述

我一直在尝试考虑最快的 Spark 查询的理想表结构是什么。

我将尝试提供一个用例:假设您收集世界上每辆汽车的统计数据,并且您想使用基本数学计算各种指标(即 add、sub、mult、div)。

用最少的字段(例如:day、metric、type、value)在 tall 表中构造数据会更好吗?

或者构建一个可以独立存储指标的宽表会更好。具有更多字段,例如:day、emmision_value、tire_pressure_value、speed_value、weight_value、heat_value、radio_value 等。

是否可以说高桌更适合火花?我认为使用更高的桌子会减少内存密集度。

标签: apache-sparkpysparkapache-spark-sqlspark-streaming

解决方案


正如评论中提到的,这是一个与 spark 不完全相关的主观问题,但我会尽量回答。

我认为使用更高的桌子会减少内存密集度。

并非如此,根据您提到的用例,在任何一种情况下所需的存储量都应该相同,所以让我们解决这个问题。在较高的桌子的情况下,有更多的行和较少的列,而在宽桌子的情况下则相反。因此,在单元级别上,它应该大致相同。我正在考虑独立于存储格式的未压缩数据。

现在让我们谈谈提到的用例。简单地说,就是聚合。这可以被馈送到下游或可以用于报告。通常记住这一点,更宽的表/视图更好,因为 - 每天更少的行 = 更少的 I/O 更少的洗牌。

话虽如此,看看下面的缺点,

  1. 固定模式导致的模式演化问题
  2. 更适合批处理

更高的表对流更友好,更容易扩展额外的指标,如果它与支持下推的源一起使用,可以导致快速的部分扫描。

简而言之,这在很大程度上取决于您的操作。


推荐阅读