Spark DataFrame分区和镶木地板分区

Aya*_*was 4 apache-spark parquet

  1. 我在列上使用分区来将数据存储在拼花中。但我看到没有。实木复合地板分区文件的编号与否不同。Rdd分区。rdd分区和镶木地板分区之间没有相关性吗?

  2. 当我将数据写入镶木地板分区并使用Rdd重新分区,然后从镶木地板分区读取数据时,读/写期间rdd分区号相同时是否有任何条件?

  3. 使用列ID存储数据框和通过相同的列ID重新分区数据框有何不同?

  4. 在考虑Spark中联接的性能时,我们应该考虑进行存储分区或重新分区(或两者都考虑)

Chi*_*rma 8

您在这里要问的几件事-数据的分区,存储和平衡,

分区:

  1. 分区数据通常用于水平分布负载,这具有性能优势,并有助于以逻辑方式组织数据。
  2. 分区表更改了持久数据的结构,现在将创建反映此分区结构的子目录。
  3. 仅当分区方案反映通用筛选时,这才能大大提高查询性能。

在Spark中,这是通过将df.write.partitionedBy(column*)数据划分columns为相同的子目录来完成的,并将数据分组。

铲斗:

  1. 存储桶是用于将数据集分解为更易于管理的部分的另一种技术。根据提供的列,将整个数据散列到用户定义数量的存储桶(文件)中。
  2. 与Hive的代名词 Distribute By

在Spark中,这是通过将df.write.bucketBy(n, column*)数据划分columns为相同的文件来完成的,并将数据分组。生成的文件数由n

分区:

  1. DataFrame根据给定的分区表达式将给定数量的内部文件平均返回一个新的均衡。生成的DataFrame被哈希分区。
  2. Spark在这些分区上管理数据,从而有助于以最少的网络流量并行化分布式数据处理,以便在执行程序之间发送数据。

在Spark中,这是通过将df.repartition(n, column*)数据划分columns为相同的内部分区文件来完成的,并将数据分组。请注意,没有数据可持久存储到存储中,这仅仅是基于类似于以下约束的数据内部平衡bucketBy

l

1)我在列上使用分区来将数据存储在镶木地板中。但我看到没有。实木复合地板分区文件的编号与否不同。Rdd分区。rdd分区和镶木地板分区之间没有相关性吗?

  • 重新分区与bucketBy相关,而不与partitionedBy相关。分区文件受其他配置(例如spark.sql.shuffle.partitionsspark.default.parallelism

2)当我将数据写入镶木地板分区并使用Rdd重新分区,然后从镶木地板分区读取数据时,读/写期间rdd分区号相同时是否有任何条件?

  • 在读取期间,分区数将等于 spark.default.parallelism

3)使用列ID存储数据框和通过相同的列ID重新分区数据框有何不同?

  • 除桶化是一种写操作外,它的工作原理与之相似,只是用于持久性。

4)在考虑Spark中联接的性能时,我们应该考虑存储分区或重新分区(或两者都可以)

  • repartition这两个数据集都存在于内存中,如果其中一个或两个数据集都存在,则bucketBy也要进行调查。