Использование одного и того же глобального временного представления в двух разных экземплярах - PullRequest
0 голосов
/ 24 октября 2019
Pyspark 3.7 and Spark 2.3

У меня в test.py есть функция:

def get_or_create_spark_session():
    spark = SparkSession \
        .builder \
        .getOrCreate()
    return spark

Я пытаюсь использовать один и тот же сеанс в разных местах моего приложения pyspark. Поэтому я вызываю эту функцию везде, где мне нужно, и пытаюсь использовать функцию getOrCreate() SparkSession для повторного использования существующего сеанса.

Я создаю gloablTempView в одном файле main.py и пытаюсь использоватьто же самое в test.py также (в некоторой третьей функции).

Я вызываю эту функцию как:

В main.py

spark = get_or_create_spark_session()
x = spark.read.json("D:\\test.json")
x.createGlobalTempView("dummy")

И в test.py, Я снова пытаюсь это сделать в какой-то другой функции xyz () как:

spark = get_or_create_spark_session()
y = spark.sql("""select * from global_temp.dummy""")
y.show()

Я предполагаю, что, поскольку я не закрываю или не завершаю SparkSession в main.py, я должен иметь возможностьиспользовать тот же GlobalTempView в любом месте приложения с помощью getOrCreate ().

Но вместо этого я получаю сообщение об ошибке:

pyspark.sql.utils.AnalysisException: "Table or view not found: `global_temp`.`dummy`; line 1 pos 14;\n'Project [*]\n+- 'UnresolvedRelation `global_temp`.`dummy`\n"

Не правильно ли мое мышление? Или имплментация не так? Являются ли эти две "искры" совершенно разными сессиями? Как правильно достичь того, чего я пытаюсь достичь?

Я не хочу читать файл test.json два раза, подразумевая, что я создаю две сессии spark в одном приложении.

...