在你的下方,你会看到我试图做的简化版本。我从存储在S3中的150 Dataframe
(> 10TB)加载parquets
,然后我为此数据框提供了一个带有func.monotonically_increasing_id()
的id列。之后我保存了这个dataframe
的几个偏差。我申请的功能比我在这里提出的要复杂一点,但我希望这能得到重点
DF_loaded = spark.read.parquet(/some/path/*/')
DF_with_IDs = DF_loaded.withColumn('id',func.monotonically_increasing_id())
#creating parquet_1
DF_with_IDs.where(col('a').isNotNull()).write.parquet('/path/parquet_1/')
#creating parquet_2
DF_with_IDs.where(col('b').isNotNull()).write.parquet('/path/parquet_2/')
现在我注意到创建parquet_1
后的火花再次加载来自S3的所有数据以创建parquet_2
。现在我担心parquet_1
的ID与parquet_2
的ID不匹配。同一行在parquets
中都有不同的ID。因为据我所知,逻辑计划的火花出现如下:
#parquet_1
load_data -> give_ids -> make_selection -> write_parquet
#parquet_2
load_data -> give_ids -> make_selection -> write_parquet
两个parquets
中的相同行的ID是否相同?
答案 0 :(得分:1)
只要:
monotonically_increasing_id
应该稳定。请注意,这会禁用谓词下推。
rdd.zipWithindex.toDF
应该是稳定的,与配置无关,因此可能更为可取。