Spark中的分区是什么



我正在努力理解,Spark中的分区是什么?

我的理解是,当我们从一个源读取并放置到任何特定的Datatset中时,该数据集可以被拆分为多个sub-Datasets,这些sub-Datasets被称为分区及其在集群中的分布位置和方式。这是正确的吗?

当我读到一些网上文章时,我产生了怀疑,上面写着

在引擎盖下,这些RDDs or Datasets存储在不同的集群节点。分区基本上是大型分布式数据集

这句话打破了我的底线。如上所述,RDDs or Datasets位于分区内。但我认为RDD本身就是一个分区(在拆分之后(。

有人能帮我澄清这个疑问吗?

这是我的代码片段,我在其中读取JSON。

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

所以,在阅读它本身的时候,我如何将其拆分为多重分区?或者有其他办法吗?

什么是分区?

根据spark文档,spark中的分区是存储在集群中某个节点上的数据(数据的逻辑划分(。分区是Apache Spark中的基本并行单元。中的RDD/Dataframe/DatasetApache Spark是分区的集合。

所以,当你做时

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

spark读取源json数据并创建一个(分区数据的逻辑划分(,然后在集群中并行处理这些分区。

例如,用外行的话来说。。。如果你有一项任务要把1吨小麦从一个地方移到另一个地方,而你只有1个人的资源(类似于一个线程(来完成这项任务。所以这里有很多可能性。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)

您可以使用coalize((api来降低分区。

最新更新