Один из распространенных способов вызова Spark как кода SQL — использование createOrReplaceTempView
, т. е.
df.createOrReplaceTempView('table_view_name')
Когда мы передаем один и тот же df нескольким функциям для выполнения некоторых преобразований, как многократный вызов df.createOrReplaceTempView
влияет на производительность. то есть
# file_a.py
Class_a:
def function_a(df):
df.createOrReplaceTempView('table_view_name')
....
# file_b.py
Class_b:
def function_b1(df):
df.createOrReplaceTempView('table_view_name')
....
def function_b2(df):
df.createOrReplaceTempView('table_view_name')
....
# file_c.py
Class_c:
def function_c1(df):
df.createOrReplaceTempView('table_view_name')
....
#main.py
from file_a import Class_A
from file_b import Class_B
from file_c import Class_C
class_a = Class_A()
class_b = Class_B()
class_c = Class_C()
sample_df = Spark.read.parquet("...")
sample_df = class_a.function_a(sample_df)
# Note class_b has two transformations second one use the output of the first one
sample_df_b = class_b.function_b1(sample_df)
sample_df = class_b.function_b2(sample_df_b)
# Note class_c has one transformations but it take the output of class_a as input
sample_df_c = class_c.function_c1(sample_df)
Теперь мне интересно
- Вызов
createOrReplaceTempView
в каждой функции создает проблемы с производительностью? Есть ли лучший способ? - function_b1 из class_b и function_c1 из class_c принимают одинаковые входные данные, поэтому улучшается ли производительность, если я использую
createGlobalTempView
и удаляю их вручную после завершения задания преобразования?