Spark 使用的理想表格结构是什么(高与宽)?

What is the ideal structure of tables for Spark to work with (Tall vs Wide)?

我一直在思考理想的 table 结构对于最快的 Spark 查询是什么。

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

用最少的字段(例如:天、指标、类型、值)在高 table 中构建数据会更好吗?

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

高个子 table 更适合 spark 这样说对吗?我认为更高的 table.

会占用更少的内存

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

I assume it would be less memory intensive with a taller table.

不一定,根据您提到的用例,两种情况下所需的存储量应该相同,所以让我们解决这个问题。如果表格较高,则行数较多,列数较少,如果表格较宽,则相反。所以在细胞水平上它应该大致相同。我正在考虑独立于存储格式的未压缩数据。

现在让我们谈谈提到的用例。简单来说,就是聚合。这可以馈送到下游或可以用于报告。通常记住这一点,更宽的 tables/views 更好,因为 - 每天更少的行数 = 更少 I/O 因为更少的随机播放。

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

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

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

总之,很大程度上取决于你的操作。