АЖ
Size: a a a
АЖ
МК
АЖ
A
A
ИК
A
МК
ИК
A
ИК
A
D
A
ММ
df.applyInPandas(func)
, есть только df.groupBy().apply(func)
, соответственно приходится делать группировку по какому-то столбцу/столбцам.df.repartition(400, 'user_id')
, и нам неизвестно, по каким колонкам. А groupBy не выполняет лишнего shuffle только в том случае, если условие группировки совпадает с условием для партиционирования. В противном случае он повторно выполнит репартиционирование по новому набору колонок. Причем не на то же самое количество партиций, что и в исходном dataframe, а на то, что указано в параметрах Spark сессии (то ли spark.sql.shuffle.partitions
, то ли spark.default.parallelism
). И изменить это значение на какое-нибудь df.rdd.getNumPartitions()
тоже не получится, т.к. groupBy не принимает на вход число партиций.spark_partition_id
, но Spark все равно выполняет повторное репартиционирование. Причем т.к. значение столбца зависит от текущего партиционирования, с этим способом вообще выходит какая-то дичь, executor вылетает с нехваткой памяти, хотя размер партиций такой, что памяти там двукратный запас.AS
PK
PK
ММ
ММ