改善实木复合地板中多个火花数据集的读取和连接

时间:2019-04-30 21:21:33

标签: apache-spark dataframe apache-spark-sql apache-spark-dataset

我必须读取每个大约5个演出的多个数据集。每个directoryPath包含30多个文件。我读取它们的方法是使用下面的命令并转换为一些映射。

 Dataset<T> DatasetA = spark.read.parquet(directoryPath).as(Encoders.bean(someMapping));

这种情况适用于> 15的多个文件,后来我根据共同的key将它们连接在一起。

这里我有一个场景,其中要提高性能,可以添加另一个文件LesserDataFileDataset,以减少最终我正在处理的数据量。

我首先坚持LesserDataFileDataset,所以我不会一遍又一遍地阅读它。 我尝试了两种方法来改善此功能的方式。

  1. 我将上述每个数据集与LesserDataFileDataset结合在一起。 这产生了DatasetADatasetB ...等。数据更少。 之后,我对所有这些数据集执行联接操作
DatasetA
.join(DatasetB.drop(Common key to select only from DatasetA),ColumnToJoin)
.join(DatasetC.drop(Common key to select only from DatasetA),ColumnToJoin)
  1. 在第二条路径中,我尝试使用
    最后将数据集连接在一起 LesserDataFileDataset,如下所示:
LesserDataFileDataset.
 .join(DatasetA,ColumnToJoinSequenceWithOneColumn,"left-outer")
.join(DatasetB,ColumnToJoinSequenceWithOneColumn,"left-outer")
.join(DatasetC,ColumnToJoinSequenceWithOneColumn,"left-outer")

这在阅读和加入时会产生相似的性能。

我尝试提高性能的另一种方法是阅读file1的{​​{1}},DatasetA的{​​{1}} ...然后将其与file1结合以类似于上述两种方法的方式。这具有不利的影响,使性能实际上下降了。有人可以帮忙吗。

0 个答案:

没有答案