首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据集预测是否受益于数据集分区?

数据集预测是否受益于数据集分区?
EN

Stack Overflow用户
提问于 2022-09-07 12:46:27
回答 1查看 74关注 0票数 1

我们希望使用预测来加快过滤和连接到一个具有数千个小(kb大小)文件的大增量数据集上。

是否建议将主数据集( transforms.api.IncrementalTransformOutput.write_dataframe()partitionBy=[col1, col2,...])进行分区,以减少文件数量,或者这是否是多余的工作,因为它无论如何都是由预测完成的?

如果建议优化主要数据集,是否有关于何时进行这一工作的指导方针?

EN

回答 1

Stack Overflow用户

发布于 2022-09-07 13:29:21

问得好!由于Spark使用分布式文件存储,因此可以使用许多技术来提高性能。答案在于您要在重新分区之后对数据做什么。需要对性能进行经验性测试(尝试一个设置并查看它是否有所改进),并查看构建报告以查看火花细节。您可以使用以下几种技术:

  1. 基本技术:对小型数据集使用单个分区并在内存中执行操作:如果数据非常小,则可以使用诸如广播连接之类的技术来保持内存。您还应该将数据重新划分到一个合理的大小,以便在开销和并行化之间进行权衡。我使用的经验法则是将分区保持在100-500 MB之间。您还应该过滤掉不需要的任何数据,或者删除整个列。火花不是很聪明,所以保持过滤器简单和明确的最佳性能。最后,确保您的数据是干净和一致的。例如,修改“火花”和“火花”以使用一致的大小写和间隔。否则,他们将有两个不同的代码和火花将读取它作为两个不同的价值。
  2. 哈希分区:用于下游计算何时需要匹配行键(聚合、联接等)和/或预排序也将有助于加快不同用例的速度。如果要进行许多联接,则应该使用散列分区,并且在保存数据之前不要忘记重新分区。 df = df.repartition(200) output.write_dataframe(df,bucket_cols="patient_id",bucket_count=200,sort_by="patient_id")
  3. 单元分区:大型数据集,您希望在筛选过程中进行大量的剪枝,并且具有较低的基数列。只有在对基数较低的数据集进行大量筛选的情况下,才可以这样做。如果您在具有较高基数的dataset上使用Hive分区,那么最终将得到太多的小文件。 output.write_dataframe(df,partition_cols="date")

我建议您用一个最小的可验证示例编写一个具体的问题,我可以为您的用例提供一个更深入、更具体的答案。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73635789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档