【发布时间】:2017-09-09 20:12:45
【问题描述】:
我遇到了一个问题,显然在 Spark SQL 中对空表执行完全外连接会导致文件大小比简单地从其他数据集中选择列而不执行连接要大得多。
基本上,我有两个数据集,一个非常大,另一个是空的。我浏览并从大型数据集中选择了几乎所有列,并将其完全外连接到空数据集中。然后,我将生成的数据集写入 snappy-compressed parquet(我也尝试过 snappy-compressed orc)。或者,我只是从大型数据集中选择相同的列,然后将生成的数据集保存为如上所述的 snappy-compressed parquet(或 orc)。文件大小完全不同,因为来自空数据集连接的文件几乎是简单选择文件的五倍。
我已经在许多不同的数据集上进行了尝试,并得到了相同的结果。在查看数据时:
- 输出行数相同(使用 spark-shell 通过读入输出数据集并进行计数来验证)
- 架构相同(使用 spark-shell、parquet-tools 和 orc-tools 验证)
- 抽查数据看起来是一样的,我在这两种类型的输出中都没有看到任何疯狂的数据
- 我使用相同的 snappy 压缩显式保存了所有文件,并且 Spark 为输出文件提供了“.snappy.parquet”扩展名
我知道对空表进行联接实际上是没有意义的(我这样做是作为一些通用代码的一部分,这些代码总是执行完全外部联接,有时会遇到空数据集)。而且,我已经更新了我的代码,所以它不再这样做了,所以问题已经解决了。
不过,我想了解为什么/如何会发生这种情况。所以我的问题是——为什么使用空数据集进行 Spark SQL 连接会导致文件更大?和/或任何关于如何找出导致生成的镶木地板文件如此大的原因的任何想法也会有所帮助。
【问题讨论】:
标签: apache-spark apache-spark-sql parquet