【发布时间】:2020-06-06 07:58:54
【问题描述】:
我有一个 100GB 大小的 .csv 文件。 我想尽快将它加载到 Spark 中。
Spark 在内部是否将文件分解为块并在多个节点上并行解析这些块? 还是 Spark 仅使用一个节点解析文件并在节点之间分配数据帧?
【问题讨论】:
标签: csv apache-spark apache-spark-sql
我有一个 100GB 大小的 .csv 文件。 我想尽快将它加载到 Spark 中。
Spark 在内部是否将文件分解为块并在多个节点上并行解析这些块? 还是 Spark 仅使用一个节点解析文件并在节点之间分配数据帧?
【问题讨论】:
标签: csv apache-spark apache-spark-sql
默认情况下,Spark 会将 CSV file 分成 ~128MB 块,并以分布式方式读取 CSV 文件方式。
Example:
在yarn cluster模式下读取csv文件3126179159 bytes,划分为24 partitions(tasks),并使用可用于您的应用程序的并行线程读取文件!
i.e 3126179159/(24*1024) = ~128MB
您可以检查how many partitions您的文件已在 spark 作业 UI(或)spark 历史服务器 UI 中划分。这等于文件读取的已完成任务数。您可以通过在 UI 的“作业”选项卡中查找“已完成的作业”并查找读取的文件来找到它。
【讨论】:
Spark 在内部将文件分解成块并解析 在多个节点上并行块?或者 Spark 是否解析文件 仅使用一个节点并将数据帧分布在两个节点之间 节点?
如果您使用重新分区或不重新分区默认数量的分区,Spark 会将文件分解为称为分区(并行单位)的块。
您可以使用repartition增加或减少分区数,但只能使用coalesce减少分区数
见here
最后根据执行器和核心的数量,它将根据您的 spark-submit 参数处理多个节点或单个节点上的数据。
【讨论】: