apache-spark - 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 等。
是否可以说高桌更适合火花?我认为使用更高的桌子会减少内存密集度。
解决方案
正如评论中提到的,这是一个与 spark 不完全相关的主观问题,但我会尽量回答。
我认为使用更高的桌子会减少内存密集度。
并非如此,根据您提到的用例,在任何一种情况下所需的存储量都应该相同,所以让我们解决这个问题。在较高的桌子的情况下,有更多的行和较少的列,而在宽桌子的情况下则相反。因此,在单元级别上,它应该大致相同。我正在考虑独立于存储格式的未压缩数据。
现在让我们谈谈提到的用例。简单地说,就是聚合。这可以被馈送到下游或可以用于报告。通常记住这一点,更宽的表/视图更好,因为 - 每天更少的行 = 更少的 I/O 更少的洗牌。
话虽如此,看看下面的缺点,
- 固定模式导致的模式演化问题
- 更适合批处理
更高的表对流更友好,更容易扩展额外的指标,如果它与支持下推的源一起使用,可以导致快速的部分扫描。
简而言之,这在很大程度上取决于您的操作。
推荐阅读
- android - SSL 握手中止:ssl=0x55b0d4f9b8:系统调用期间的 I/O 错误,对等方重置连接,在 Marshmallow 和以下设备上
- asp.net - 从代码隐藏的asp.net gridview中的行和列中显示相同的数据?
- java - 如何在maven中编译单个java文件
- node.js - 包含在 hasMany 关联上,仅返回 sequelize nodeJs 中的许多结果之一
- django - Django Chart.js
- sql - 行级策略不适用于我的表
- java - NPM安装java
- javascript - neo4j (spoon-neo4j) 中表格的可视化
- python - matplotlib 错误:x 和 y 必须具有相同的第一维和 lambda 函数
- java - springbatch excel第二次不起作用