首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据写入HDFS

将数据写入HDFS
EN

Stack Overflow用户
提问于 2021-11-17 10:44:55
回答 1查看 193关注 0票数 1

我有一个关于计算后写结果的火花的问题。我知道,每个执行器在完成分区工作后,都会将其结果写回HDFS/local-文件系统(基于所使用的集群管理器)。

这是有意义的,因为如果不需要任何结果聚合,则不需要等待所有执行器完成并将结果写回。

但是,当数据需要按升序或降序在特定列(例如ID)上排序时,写操作是如何工作的?

在开始计算之前,spark的逻辑计划是否会首先根据每个执行器的ID对分区进行排序?在这种情况下,任何执行程序都可以先完成并开始将其结果写入HDFS,那么整个框架如何确保最终结果得到排序?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-18 09:03:08

从这个答案中我了解到:https://stackoverflow.com/a/32888236/1206998排序是一个使用RangePartitioner将所有数据集项洗牌到“排序”分区中的过程:分区之间的“边界”是作为数据集样本中的百分位数项选择的项。

所以,就像:

number

  • broadcast

  • 收集示例集

  • 排序项

  • ,选择k*i项,其中i为输出分区partition

  • sort除以的样本大小--所有输入分区上的边界

  • ,对于所有输入分区,通过与每个分区内的输出partition

  • sort项中的广播partition

  • sort数据进行比较,查找条目应该指向的输出分区(

F 216)

如果我们有dataset [1,5,6,8, 10, 20, 100] (按任何顺序分布)并将其排序为3个分区,则会提供:

[1,5,6] (sorted within partition)

  • partition 2= [8,10] ( " )

  • partition 3= [20,100] ( " )

因此,以后的任何操作都可以独立地对每个分区执行,包括编写。

请记住:

locally.

  • Write
  • 火花管理内存中的数据,并根据配置编写分区数据,每个分区都要编写分区数据,但是输出文件(像hdfs这样的分布式FSs )是隐藏的,直到所有数据都被写入。好吧,至少对于拼花写手来说不是很确定。如您所料,排序是一项昂贵的操作(

)。

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

https://stackoverflow.com/questions/70002905

复制
相关文章

相似问题

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