В озере данных паркета, разделенном на year
и month
, с spark.default.parallelism
, равным, например, 4
, допустим, я хочу создать DataFrame, состоящий из месяцев 11 ~ 12 из 2017 и месяцев 1 ~3 из 2018 из двух источников A
и B
.
df = spark.read.parquet(
"A.parquet/_YEAR={2017}/_MONTH={11,12}",
"A.parquet/_YEAR={2018}/_MONTH={1,2,3}",
"B.parquet/_YEAR={2017}/_MONTH={11,12}",
"B.parquet/_YEAR={2018}/_MONTH={1,2,3}",
)
Если я получу количество разделов, Spark по умолчанию использовал spark.default.parallelism
:
df.rdd.getNumPartitions()
Out[4]: 4
Принимая во вниманиеучтите, что после создания df
мне нужно выполнять операции join
и groupBy
за каждый период, и эти данные более или менее равномерно распределены по каждому из них (около 10 миллионов строк за период):
Вопрос
- Улучшит ли перераспределение производительность моих последующих операций?
- Если да, если у меня будет 10 разных периодов (по 5 в год как в А, так и вБ), следует ли мне перераспределять по количеству периодов и явно ссылаться на столбцы для перераспределения (
df.repartition(10,'_MONTH','_YEAR')
)?