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

如何在 Spark 中将分区分配给任务

乔俊才
2023-03-14

假设我正在从S3文件夹中读取100个文件。每个文件的大小为10 MB。当我执行<code>df=spark.read时。parquet(s3路径),文件(或更确切地说分区)如何在任务之间分布?E、 g.在这种情况下,<code>df</code>将有100个分区,如果spark有10个任务正在运行以将该文件夹的内容读取到数据帧中,那么这些分区是如何分配给这10个任务的?它是以循环方式进行的,还是每个任务在基于范围的分布中获得所有分区的相等比例,还是其他方式?任何指向相关资源的指针也将非常有用。非常感谢。

共有1个答案

邢运良
2023-03-14

任务与分区数量成正比。

Spark尝试直接从原始分区中对行进行分区,而不向驱动程序带来任何内容。

分区逻辑是从随机选择的目标分区开始,然后以循环方法将分区分配给行。请注意,为每个源分区选择“开始”分区,可能会有冲突。

最终的分布取决于许多因素:源/目标分区的数量以及数据框中的行数。

 类似资料:
  • 我有两个超类(和),和一个子类。Dog类有一个所有者setter函数(。我在分配和抽象类类型时遇到问题。 阐明想法的代码示例: 假设我需要像这样使用这3个类,并且两个类具有相同的功能。我该怎么做?

  • spark如何给一个执行器分配一个分区? 当我使用 1 个驱动程序和 5 个执行器在火花外壳中运行以下行时: 重新分区后,10个分区仍然位于原来的两个节点上(总共5个)。这似乎非常低效,因为5个任务在包含分区的每个节点上重复运行,而不是平均分布在节点上。在同一个rdds上重复多次的迭代任务中,效率低下最为明显。 所以我的问题是,Spark如何决定哪个节点具有哪个分区,有没有办法强制将数据移动到其他

  • 我使用的是Kafka流,具有无状态的简单处理器拓扑结构。 我有一个主题,有100个分区,有2台机器,每台机器有50个线程,运行同一个流媒体应用程序,因此最终我将在它们之间进行1-1映射。 主题中的消息已是键控消息。 我有一个逻辑约束,一旦线程连接到一个或多个分区,它应该继续处理这些分区(当然,直到重新启动发生,它会重新洗牌) 我从日志中看到线程反复(重新)加入消费者组。 我的问题,kafka 流

  • 我有两个超类(和)和一个子类。类有一个所有者设置函数(),需要它接受任一超类作为其变量。我在分配和抽象类类型时遇到问题。 阐明想法的代码示例: 假设我需要像这样使用这3个类,并且这两个所有者类具有相同的函数。我该怎么做?

  • 以前,我从android的文件夹中读取了一个json文件, 但是现在为null。请纠正我 错误日志是,