Эквивалент Databricks s c .broadcast () локально с подключением Databricks - PullRequest
0 голосов
/ 18 марта 2020

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

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

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'

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

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

1 Ответ

0 голосов
/ 20 марта 2020

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

sc = SparkContext()

Вы создадите new новый 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))
...