Общие сведения о производительности SparkSQL createOrReplaceTempView

avatar
Muhammad Raihan Muhaimin
1 июля 2021 в 21:04
84
0
0

Один из распространенных способов вызова 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 и удаляю их вручную после завершения задания преобразования?
Источник

Ответы (0)