首页 > 解决方案 > 我该如何解决 TypeError: 'SparkContext' object is not callable 错误?

问题描述

我的代码是:

import pyspark
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
from pyspark import SparkContext

spark = SparkSession.builder \
    .master("local") \
    .appName("pyspark_uygulama") \
    .getOrCreate()

sc = spark.sparkContext()
sc

我得到这个错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-2fb21ed9bfcc> in <module>
      9     .getOrCreate()
     10 
---> 11 sc = spark.sparkContext()
     12 sc

TypeError: 'SparkContext' object is not callable

首先,我将其更改spark.SparkContext()spark.sparkContext()它不起作用(它解决了另一个问题)。我将我的 java 开发工具包更新到最新版本。它也没有解决错误。有什么建议吗?

标签: pyspark

解决方案


报错信息是对的,spark.sparkContext 肯定是不可调用的,查看这里的文档(不熟悉pyspark,我会解释使用spark 和scala)

val sparkContext: SparkContext
与此 Spark 会话关联的 Spark 上下文。\

根据文档, spark.sparkContext 不接受任何参数。

实际上有两个 sparkContext:一个在 org.apache.spark 中,另一个在 org.apache.spark.sql.SparkSession 中。

为了方便用户,spark.sparkContext 提供了一种无需实例化即可访问 SparkContext 的方法,但其功能有限。人们必须自己实例化 org.apache.spark.SparkContext 才能获得全部功能。

如果您确实需要一个完整功能的 sparkContext 对象,我建议您自己实例化 SparkContext,如果您想访问 SparkContext 的方法,如并行化、textFile 等,您可以在不调用 sparkContext 的情况下进行操作,

sc = spark.sparkContext
sc.parallelize(...) 
sc.textFile(...)

org.apache.spark 中 SparkContext 的构造函数的参数(在 pyspark 中应该是 pyspark.SparkContext 我猜)可以通过 SparkSession.builder().master().appName(...).config(.. .),因此您实际上不需要调用 spark.sparkContext。

希望这会有所帮助并原谅我的表达。


推荐阅读