什么是spark中的分区?

unhi4e5o  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(525)

我在想,什么是Spark的分割?
我的理解是,当我们从一个来源和地方读到任何特定的 Datatset ,则该数据集可以拆分为多个 sub-Datasets ,那些 sub-Datasets 称为分区及其upto spark框架,它在集群中的分布位置和分布方式。对吗?
当我在网上读到一些文章时,我产生了一个疑问
在引擎盖下,这些 RDDs or Datasets 存储在不同群集节点上的分区中。分区基本上是大型分布式数据集的逻辑块
这句话打破了我的理解。根据上述声明, RDDs or Datasets 坐在隔板里面。但我认为rdd本身就是一个分区(在拆分之后)。
有人能帮我澄清这个疑问吗?
这是我的代码片段,我在这里从json读取。

Dataset<Row> ds = spark.read().schema(Jsonreadystructure.SCHEMA)
                .json(JsonPath);

因此,在阅读它本身时,如何将它拆分为多个分区?或者其他方法?

b4qexyjb

b4qexyjb1#

什么是分区?
根据spark文档,spark中的分区是存储在集群节点上的原子数据块(数据的逻辑划分)。分区是apachespark中的基本并行单元。apachespark中的rdds/dataframe/dataset是分区的集合。
所以,当你这么做的时候

Dataset<Row> ds = spark.read().schema(Jsonreadystructure.SCHEMA)
                .json(JsonPath);

spark读取源json数据并创建一个分区(对数据的逻辑分区是分区),然后在集群中并行处理这些分区。
比如说外行的话。。。如果你的任务是把一吨重的小麦从一个地方运到另一个地方,而你只有一个人资源(类似于一根线)来完成这个任务,那么这里有很多可能性。1) 您的资源可能无法一次移动如此巨大的重量(类似于你没有足够的cpu或ram)2)如果它是有能力的(类似于high-conf机器),那么它可能需要花费大量的时间,而且可能已经压力过大。3) 当您的资源执行负载传输时,它不能处理中间的任何其他进程。很快。。。。。
如果你把1吨重的小麦分成1公斤重的小麦块(类似于数据上的逻辑分区),再雇更多的人,然后让你的资源搬走怎么办。现在这对他们来说容易多了,而且你可以再增加一些人力资源(类似于扩展集群),并且可以非常轻松快速地完成你的实际任务。
与上述方法类似,spark对数据进行逻辑划分,这样您就可以以最佳方式使用集群资源并行处理数据,并且可以更快地完成任务。
注意:rdd/dataset和dataframe只是数据逻辑分区的抽象。rdd和dataframe中还有其他一些我在示例中没有介绍的概念(即弹性和不变性)
如何将其拆分为多个分区?
您可以使用重分区api进一步拆分分区

spark.read().schema(Jsonreadystructure.SCHEMA)
                    .json(JsonPath).**repartition**(number)

您可以使用coalesce()api来关闭分区。

相关问题