如何在Spark SQL中强制执行内存中的分块排序?

埃胡德·埃谢特

实木复合地板文件格式对记录的顺序敏感。它的列编码可能会根据排序顺序产生较小的文件。另一方面,对TB级的输入记录进行排序非常昂贵。

分成几块,例如10GB,可以在内存中进行排序,同时生成几乎一样小的木地板文件,就好像整个1 TB已完全排序一样。

是否可以指示Spark SQL在生成镶木文件之前进行分块排序?

另一个用例是在编写统一的Parquet文件之前使用分块排序将许多小型Parquet文件合并为一个。

零323

据我所知,Spark <2.0.0中没有开箱即用的此类选项您可以尝试做的一件事是在编写之前coalesce与HiveSORT BY子句结合使用,这应该会产生类似的效果:

val df: DataFrame = ???
val n: Int = ??? //

df.coalesce(n)
df.coalesce(n).registerTempTable("df")
sqlContext.sql("SELECT * FROM df SORT BY foo, bar").write.parquet(...)

或者

df.coalesce(n).sortWithinPartitions($"foo", $"bar").write.parquet(...)

请记住,这SORT BY并不等同于DataFrame.sort

引入了Spark 2.0.0sortBybucketBy方法,其中后者按给定的列对每个存储桶中的输出进行排序,应支持Parquet

val df: DataFrame = ???
val nBuckets: Int = ???

df.write.bucketBy(nBuckets, "foo").sortBy("foo", "bar").saveAsTable(...)

注意:这似乎仅在与保存Parquet文件时有效,saveAsTable但是它似乎并不支持直接(df.write.bucketBy(...).sortBy(...).parquet(...))中的Parquet编写器spark-2.0.0-preview

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在函数调用中强制执行序列

如何在Eclipse中强制执行线程转储?

如何在Java中执行内存有效的数组排序?

如何在SQL(Postgres)中强制执行过滤器评估顺序?

如何在ggplot geom_area中强制执行堆栈排序

Python中的枚举:如何在方法参数中强制执行

如何在.Net中强制执行OutOfMemoryException

如何在Spark中强制执行DataFrame评估

如何在DRF中强制执行POST幂等性?

如何在VS2017中的策略中强制执行代码分析检查?

如何在Monaco编辑器中的JavaScript中强制执行功能签名

如何在ExcelDataReader中强制执行无类型的列?

如何在Python中的命名元组中强制执行变量键入?

如何在vscode扩展CompletionItems中强制执行顺序

如何在python中从python中强制执行或呈现浏览器中的脚本?

如何在git中强制执行“文件名中没有空格”策略?

无法在SLURM中强制执行内存限制

如何在Perl中强制执行long double

如何在Java中强制执行构造函数

如何在GNOME Web中强制执行大文本?

如何在Spark中执行辅助排序?

如何从域名中删除www并强制执行https?

如何在Jenkins DSL中强制执行参数排序?

如何在matplotlib中的网格内强制执行图?

如何在 Antlr 中强制执行某些规则

如何在 Java <= 8 中强制执行模块边界

如何在异步中强制执行完整评估?

如何在 Cloud Firestore 中强制执行 App Check?

如何在 blazor 组件中强制执行参数?