1

我正在将一些代码从 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 连接在本地运行我的代码:https ://docs.databricks.com/dev-tools/databricks-connect.html

4

2 回答 2

1

除了从 SparkSession 中检索 sparkContext 之外,您还可以直接如下所示:

res = spark.sparkContext.broadcast(spark.read.table(my_table))
于 2021-01-13T15:19:37.070 回答
0

所以主要问题是在创建 SparkSession() 时,您还创建了一个 SparkContext(),这意味着如果您通过执行以下操作创建一个新的 sparkContext():

sc = SparkContext()

您将创建一个与 sparkSession() 创建的新 SparkContext() 冲突的新 SparkContext()。您应该首先创建您的 SparkSession,然后从 SparkSession() 中检索 SparkContext。这是代码:

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))
于 2020-03-20T18:45:27.893 回答