我必须读取每个大约5个演出的多个数据集。每个directoryPath包含30多个文件。我读取它们的方法是使用下面的命令并转换为一些映射。
Dataset<T> DatasetA = spark.read.parquet(directoryPath).as(Encoders.bean(someMapping));
这种情况适用于> 15的多个文件,后来我根据共同的key
将它们连接在一起。
这里我有一个场景,其中要提高性能,可以添加另一个文件LesserDataFileDataset
,以减少最终我正在处理的数据量。
我首先坚持LesserDataFileDataset
,所以我不会一遍又一遍地阅读它。
我尝试了两种方法来改善此功能的方式。
LesserDataFileDataset
结合在一起。
这产生了DatasetA
,DatasetB
...等。数据更少。
之后,我对所有这些数据集执行联接操作DatasetA
.join(DatasetB.drop(Common key to select only from DatasetA),ColumnToJoin)
.join(DatasetC.drop(Common key to select only from DatasetA),ColumnToJoin)
LesserDataFileDataset
,如下所示:LesserDataFileDataset.
.join(DatasetA,ColumnToJoinSequenceWithOneColumn,"left-outer")
.join(DatasetB,ColumnToJoinSequenceWithOneColumn,"left-outer")
.join(DatasetC,ColumnToJoinSequenceWithOneColumn,"left-outer")
这在阅读和加入时会产生相似的性能。
我尝试提高性能的另一种方法是阅读file1
的{{1}},DatasetA
的{{1}} ...然后将其与file1
结合以类似于上述两种方法的方式。这具有不利的影响,使性能实际上下降了。有人可以帮忙吗。