如何在Spark中创建合并排序的分区

时间:2018-08-30 06:39:52

标签: apache-spark rdd apache-spark-dataset

我有两个具有相同分区数的数据集;说2(实际上是几千,但是为了简单起见,假设2)

在我的模式中,我有两个必填字段 userId和时间戳。

分区程序通过计算hash(userId)%numPartitions来工作。每个分区都按升序在组合(用户ID,时间戳)上排序。

我已将两个数据集另存为Parquet文件,位于两个不同的目录A和B中。 文件夹A中的数据集具有文件A0.parquet和A1.parquet 文件夹B中的数据集包含文件B0.parquet和B1.parquet

我的问题是:

  1. 如何确保在加载数据集A时,spark始终为每个文件加载单个分区,即
  

分区#0 => A / A0.parquet

     

分区1 => A / A1.parquet

  1. 如何确保将数据集A和B一起加载(通过并集或其他实用的加载方法)时,我仍然有2个分区,即
  

分区#0 => mergeSorted(A / A0.parquet,B / B0.parquet)

     

分区#1 => mergeSorted(A / A1.parquet,B / B1.parquet)

注意:该问题的先前版本被标记为重复,被错误地混淆了有关HDFS分区的问题,我在这里谈论的是Spark分区。 绝对不是重复的;问题的实质是关于如何在Spark上处理和合并分区,而不是Spark如何利用HDFS分区。 HDFS只是一个存储层,应该将Spark分区与HDFS分区分开考虑;可以考虑使用本地磁盘,NFS,EFS,s3来解决这个问题……

0 个答案:

没有答案