Apache spark 在Spark中加载拼花地板文件后出现奇怪的数据倾斜

Apache spark 在Spark中加载拼花地板文件后出现奇怪的数据倾斜,apache-spark,pyspark,parquet,databricks,Apache Spark,Pyspark,Parquet,Databricks,我正在使用PySpark(约10个执行器和每个执行器4-5个内核)将一些拼花格式的云存储数据读取到Spark数据帧中。spark.sql.files.maxPartitionBytes是在加载之前设置的,这样我就可以控制每个分区的大小,进而控制可以得到的分区的大小。加载数据后,我对数据应用Spark函数/udf。因此,不应该出现混乱(join和groupby)。我期望每个分区在加载后具有相对相等的分区大小,但实际情况是加载的数据非常倾斜 当查看纱线时,最小、25%、中值、75%的分区大小都是21

我正在使用PySpark(约10个执行器和每个执行器4-5个内核)将一些拼花格式的云存储数据读取到Spark数据帧中。
spark.sql.files.maxPartitionBytes
是在加载之前设置的,这样我就可以控制每个分区的大小,进而控制可以得到的分区的大小。加载数据后,我对数据应用Spark函数/udf。因此,不应该出现混乱(join和groupby)。我期望每个分区在加载后具有相对相等的分区大小,但实际情况是加载的数据非常倾斜

当查看纱线时,最小、25%、中值、75%的分区大小都是21b(基本上是空分区),而最大分区大小是100mb,其中所有行都被加载

我现在要做的是在加载后执行
df.repartition()
来均匀地分布它,这样可以很好地解决这个问题。但这又引入了一个不理想的数据洗牌

所以问题是,为什么在加载后默认情况下分区会有如此大的倾斜?有没有一种方法可以让我以相对均匀的分区大小加载它们并跳过
df.repartition()
步骤


谢谢

您可以共享您的输入源和读取到spark的文件格式吗?还可以共享正在读取的数据的文件大小。如果它们高度倾斜,Spark很难均匀地将数据读入内存分区。正如smart_coder所提到的,文件格式/压缩类型对于理解文件是否可由Spark.Thx smart_coder拆分非常重要,并支持回复!我们正在从拼花地板装货。拼花地板文件由另一个Spark作业保存,我们在保存Spark数据帧时使用默认压缩,该压缩应为
snappy
。数据大小变化很大,从我所看到的情况来看,在较小的方面,400 MB,在较大的方面,30 GB,两者都遇到了相同的问题。您可以共享您的输入源和读取到spark的文件格式吗?还可以共享正在读取的数据的文件大小。如果它们高度倾斜,Spark很难均匀地将数据读入内存分区。正如smart_coder所提到的,文件格式/压缩类型对于理解文件是否可由Spark.Thx smart_coder拆分非常重要,并支持回复!我们正在从拼花地板装货。拼花地板文件由另一个Spark作业保存,我们在保存Spark数据帧时使用默认压缩,该压缩应为
snappy
。数据大小变化很大,从我所看到的情况来看,在小型方面,400 MB,在大型方面,30 GB,两者都遇到了相同的问题。