Эквивалент Databricks sc.broadcast() локально с подключением Databricks

Я переношу код из записной книжки Databricks в записную книжку Jupyter локально.

Следующий код, который работает в Databricks Notebook, не работает локально.

res = sc.broadcast(spark.read.table(my_table))

Вот мой местный код:

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

res = sc.broadcast(spark.read.table(my_table))

С ошибкой:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-67-dface594b1d3> in <module>
----> 1 ccode_dict = sc.broadcast(spark.read.table(my_table))

AttributeError: 'SparkSession' object has no attribute 'broadcast'

Есть ли альтернатива sc.broadcast()?

Я использую Databricks connect для локального запуска кода: https://docs.databricks.com/dev-tools/databricks-connect.html

2 ответа

Решение

Итак, основная проблема заключалась в том, что при создании SparkSession () вы также создаете SparkContext(), что означает, что если вы создаете новый sparkContext(), выполнив:

sc = SparkContext()

Вы создадите новый новый SparkContext(), который конфликтует с тем, который был создан с помощью sparkSession (). Что вам нужно сделать, так это сначала создать свой SparkSession, а затем получить SparkContext из SparkSession (). Вот код:

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate() # Create Spark Session
sc = spark.sparkContext # Retrieve the Spark Context from the Spark Session

# You can now use broadcast from the spark context
res = sc.broadcast(spark.read.table(my_table))

Вместо того, чтобы извлекать sparkContext из SparkSession, вы также можете использовать его напрямую, как показано ниже:

      res = spark.sparkContext.broadcast(spark.read.table(my_table))
Другие вопросы по тегам