Apache Spark:重新分区,排序和缓存对联接的影响
我正在探索将表联接到自身时Spark的行为。我正在使用Databricks。 我的虚拟场景是: 读取外部表作为数据框A(底层文件为增量格式) 将数据框B定义为仅选择某些列的数据框A 在column1和column2上连接数据框A和B (是的,这没有多大意义,我只是在尝试了解Spark的基本机制) a = spark.read.table("table") \ .select("column1", "column2", "column3", "column4") \ .withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5"))))) b = a.select("column1", "column2", "columnA") c= a.join(b, how="left", on = ["column1", "column2"]) 我的第一次尝试是按原样运行代码(尝试1)。然后,我尝试重新分区和缓存(尝试2) a = spark.read.table("table") \ .select("column1", "column2", "column3", "column4") \ .withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5"))))) .repartition(col("column1"), col("column2")).cache() 最后,我重新分区,排序和缓存 a = …