Spark 分区:从单节点集群上的本地文件系统加载文件

2024-01-10

我有兴趣了解 Spark 在从本地文件系统加载文件时如何创建分区。

我正在使用 Databricks 社区版来学习 Spark。当我使用 sc.textfile 命令加载一个大小只有几千字节(大约 300 kb)的文件时,spark 默认情况下会创建 2 个分区(如partitions.length 给出的)。当我加载大约 500 MB 的文件时,它会创建 8 个分区(等于机器中的核心数量)。

在此输入图像描述 https://i.stack.imgur.com/7Lvwi.png

这里的逻辑是什么?

另外,我从文档中了解到,如果我们从本地文件系统加载并使用集群,则该文件必须位于属于该集群的所有计算机上的同一位置。这不会创建重复项吗? Spark 如何处理这种场景?如果你能指出一些文章来阐明这一点,那将会有很大的帮助。

Thanks!


当 Spark 读取时本地文件系统默认分区数(由defaultParallelism标识)是所有可用核心的数量.

sc.textFile 将分区数计算为 defaultParallelism(本地 FS 情况下的可用核心数)和 2 之间的最小值。

def defaultMinPartitions: Int = math.min(defaultParallelism, 2)

参考自:火花代码 https://github.com/apache/spark/blob/e9f983df275c138626af35fd263a7abedf69297f/core/src/main/scala/org/apache/spark/SparkContext.scala#L2329

第一种情况:文件大小 - 300KB

由于文件大小非常小,因此分区数计算为 2。

第二种情况:文件大小 - 500MB

分区数等于默认并行度。在你的例子中,它是 8。

从 HDFS 读取时,sc.textFile 将采用 minPartitions 和基于 hadoop 输入分割大小除以块大小计算得出的分割数之间的最大值。

但是,当将 textFile 与压缩文件(file.txt.gz 而不是 file.txt 或类似文件)一起使用时,Spark 会禁用拆分,从而导致 RDD 仅具有 1 个分区(因为对 gzip 压缩文件的读取无法并行化)。

对于有关从集群中的本地路径读取数据的第二个查询:

文件需要在集群中的所有机器上可用,因为 Spark 可能会在集群中的机器上启动执行器,并且执行器将使用 (file://) 读取文件。

为了避免将文件复制到所有机器,如果您的数据已经位于 NFS、AFS 和 MapR 的 NFS 层等网络文件系统之一中,那么您只需指定 file:// 路径即可将其用作输入;只要文件系统安装在每个节点上的相同路径上,Spark 就会处理它。每个节点都需要有相同的路径。 请参阅:https://community.hortonworks.com/questions/38482/loading-local-file-to-apache-spark.html https://community.hortonworks.com/questions/38482/loading-local-file-to-apache-spark.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 分区:从单节点集群上的本地文件系统加载文件 的相关文章

随机推荐

  • 如何使用设备ID获取USB硬件ID?

    如何使用设备ID获取USB设备的硬件ID 我使用的是vc 6 0 操作系统是xp 使用wmi可以吗 终于解决了我的问题 谢谢你的回复 我在这里发布代码 它可能对某人有用 通过这段代码 我们可以获取与我们系统连接的设备的所有硬件ID HDEV
  • 为什么在 WPF 中的菜单上操作时 TextBox 不会失去焦点?

    如果我编辑与 ViewModel 绑定的 TextBox 上的文本 然后单击主应用程序菜单 以保存数据 ViewModel 不会使用新数据进行更新 因为不知何故 TextBox 不会失去焦点 然后数据未更新 为什么文本框不会失去焦点 我应该
  • Python循环引用

    尝试在同一个文件中拥有两个相互引用的类 让它发挥作用的最佳方法是什么 class Foo object other Bar class Bar object other Foo if name main print all ok 问题似乎在
  • Android 空指针异常 不确定如何修复它

    我的代码中的一行不断收到空指针异常错误 但我不知道如何修复它 它基本上只是另一种方法的副本 所以我不知道为什么它会给我错误 任何帮助 将不胜感激 import java util Calendar import android app Ac
  • Java 上有关无效 XML 字符的错误

    在 Java 上解析 xml 文件时出现错误 An invalid XML character Unicode 0x0 was found in the element content of the document xml 来自 web
  • Kotlin:安全的 lambda(无内存泄漏)?

    读完后这篇关于内存泄漏的文章 https medium com freenet engineering memory leaks in android identify treat and avoid d0b1233acc8 yet4778
  • “如果不是 _____ 就什么都不是”以及它检查的内容

    VB 中的这条语句是检查对象是否存在 还是检查内容是否为空 我认为它正在检查内容是否为空 但我想仔细检查一下 提前致谢 VBA 中 null 的概念 即NullReferenceException null 如果您熟悉 C 或者NullPo
  • 流星当前活跃用户?

    我正在流星中制作一个简单的聊天室 我如何获取当前活跃用户的列表 有没有办法真正获取当前连接 客户端的列表 我昨天浏览了流星源 看看是否已经有类似的东西了 我找不到连接的标志或任何东西 我想你会有两种选择 在客户端和服务器中为每个连接的用户实
  • 以编程方式更新 MS Word 中 excel 对象的链接命名范围 (2007)

    第一个问题 请问这个问题是否已经解决 但我已经彻底搜索并找不到答案 我已将几个命名范围链接到一个 Word 文档中 此 Word 文档 以及带有命名范围的相关 Excel 工作簿 是一个模板 它供同事制作这些模板 Word 文档和 Exce
  • 在python中添加年份

    如果我想在程序中添加 100 年 为什么它显示错误的日期 import datetime stringDate January 10 1920 dateObject datetime datetime strptime stringDate
  • 正则表达式仅匹配前面有空格或没有任何内容的特定字符(行首)

    考虑以下推文 RT username This is my tweet Check this RT username This is my tweet I have PART 2 downloaded In a preg replace 调
  • 将 Postgresql 数组直接读入 Golang Slice

    我有一个查询返回一行 其中有一列包含字符串数组 character varying http wp me p62MJv Jc http tyrant click 1LGBoD6 有没有简单的方法可以将其直接读入 Golang 切片中 例如
  • 在我的项目中使用 jar 时出错

    我使用 Java 1 8 来创建我的 jar 我在Java项目中可以使用它 但是在Android项目中 出现以下错误 Error Error converting bytecode to dex Cause Dex cannot parse
  • 显式复制构造函数和 std::sort

    当对具有显式复制构造函数的对象容器进行排序时 我收到我不理解的编译器错误 来自 g 4 8 2 和 clang 3 4 均处于 std c 11 模式 我创建了一个简单的示例来演示该问题 class A public explicit A
  • 如何在sql中将分钟拆分为天、小时和分钟

    我有一个由分钟组成的专栏 有没有什么简单的方法可以将分钟列拆分为仅显示天 小时 分钟的一列 DURATION 67 gt 1 hour 7 minutes 1507 gt 1 day 1 hour 7 minutes 23 gt 23 mi
  • Open Shift Kafka 实例中默认不创建 Topic

    我正在使用下面的 Camel Route 向 Kafka 实例生成消息 但该主题不存在于实例中 当 Kafka 实例中不存在主题时 如何创建主题 Component public class kafkaConfig extends Rout
  • 如何通知视图模型的所有属性已更改

    在MVVM模式中 如何通知视图模型的所有属性发生了变化 我不想调用所有属性的所有notifypropertychanged 事件 我有一个实体类 在视图模型中 我将实体的所有公共字段编写为公共属性 我想重新绑定新实体并只编写一行代码来通知所
  • 什么 API 可以使用 Java 将复选框添加到 MS Word 文件?

    我想编写一个程序来创建 MS Word 文件 但某些 API 无法向文档添加复选框 有人这样做过吗 谢谢 open office的api怎么样 http api openoffice org docs common ref com sun
  • 编译时与运行时错误[重复]

    这个问题在这里已经有答案了 可能的重复 运行时与编译时 https stackoverflow com questions 846103 runtime vs compile time 我如何知道 Java 中的特定代码行是否可能引发编译时
  • Spark 分区:从单节点集群上的本地文件系统加载文件

    我有兴趣了解 Spark 在从本地文件系统加载文件时如何创建分区 我正在使用 Databricks 社区版来学习 Spark 当我使用 sc textfile 命令加载一个大小只有几千字节 大约 300 kb 的文件时 spark 默认情况