当前位置: 首页 > 知识库问答 >
问题:

无需洗牌即可将RDD分区写入单个拼花文件

隗轶
2023-03-14

我有一个带有20个分区的火花数据帧df,每个分区都有一天的数据。这意味着我的输入数据帧已经按天分区。我的目标是编写一个拼花文件,该文件也按天分区。如果我尝试以下命令:

df。重新划分(5)。写模式(“覆盖”)。partitionBy(['day'])。拼花地板(“路径”)

当我的输入数据框已经分区时,有很多洗牌正在发生。请注意,这个数据框包含超过10亿行,并且由于洗牌,它正在杀死我的执行器。

有没有一种方法可以将每个分区按原样写入拼花文件而不进行任何洗牌?

共有1个答案

章承
2023-03-14

有没有一种方法可以将每个分区按原样写入拼花文件而不会进行任何洗牌

答:没有。重新分区会进行完全的无序排列,并创建新的分区<代码>合并(code>coalesce)避免了完全洗牌,但仍然必须洗牌数据以实现新分区(使用一些启发式方法来最小化洗牌)。

你能减少洗牌吗?是的。为什么需要重新分区(5)?看起来这里的一个低垂的果实就是删除它,因为它会创建一个完整的洗牌。如果给出更多关于df的上下文,这里可以进行额外的优化

 类似资料:
  • 我试图做一些非常简单的事情,我有一些非常愚蠢的挣扎。我想这一定与对火花的基本误解有关。我非常感谢任何帮助或解释。 我有一张非常大的桌子(~3 TB,~300毫米行,25k个分区),在s3中保存为拼花地板,我想给一些人一个很小的拼花文件样本。不幸的是,这要花很长时间才能完成,我不明白为什么。我尝试了以下方法: 然后当这不起作用时,我尝试了这个,我认为应该是一样的,但我不确定。(我添加了,以尝试调试。

  • 如果有人能用简单的术语回答这些与火花洗牌相关的问题,我将不胜感激。 在spark中,当加载一个数据集时,我们指定分区的数量,这表示输入数据(RDD)应该被划分为多少个块,并且根据分区的数量启动相等数量的任务(如果假设错误,请纠正我)。对于工作节点中的X个核心数。一次运行相应的X个任务。 沿着类似的思路,这里有几个问题。 因为,所有byKey操作以及联合、重新分区、连接和共组都会导致数据混乱。 >

  • 我有一个,其类型为和 值实际上以格式保存数据,而分组键的格式为 示例:如果我的分组rdd中有以下键 那么在我的HDFS中我应该有三个文件 为此,我尝试了以下方法:

  • 我正在使用Spark生成拼花文件(通过分区,使用Snappy压缩),并将它们存储在HDFS位置。 拼花数据文件存储在下 然后为其创建配置单元表,如下所示:

  • 我正在将一个拼花文件从DataFrame写入S3。当我查看Spark UI时,我可以看到除1项任务外的所有任务都在写作阶段迅速完成(例如199/200)。这最后一个任务似乎要花很长时间才能完成,而且常常由于超出执行器内存限制而失败。 我想知道最后一个任务发生了什么。如何优化它?谢谢。

  • 如何读取带有条件作为数据帧的分区镶木地板, 这工作得很好, 分区存在的时间为< code>day=1到day=30是否可能读取类似于< code>(day = 5到6)或< code>day=5,day=6的内容, 如果我输入< code>*,它会给出所有30天的数据,而且太大了。