【问题标题】:Unable to create spark session无法创建火花会话
【发布时间】:2019-09-22 02:15:22
【问题描述】:

当我创建一个 Spark 会话时,它会抛出一个错误

  • 无法创建 Spark 会话

  • 使用pyspark,代码sn-p:

ValueError                                Traceback (most recent call last)
<ipython-input-13-2262882856df> in <module>()
     37 if __name__ == "__main__":
     38     conf = SparkConf()
---> 39     sc = SparkContext(conf=conf)
     40 #     print(sc.version)
     41 #     sc = SparkContext(conf=conf)

~/anaconda3/lib/python3.5/site-packages/pyspark/context.py in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls)
    131                     " note this option will be removed in Spark 3.0")
    132 
--> 133         SparkContext._ensure_initialized(self, gateway=gateway, conf=conf)
    134         try:
    135             self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer,

~/anaconda3/lib/python3.5/site-packages/pyspark/context.py in _ensure_initialized(cls, instance, gateway, conf)
    330                         " created by %s at %s:%s "
    331                         % (currentAppName, currentMaster,
--> 332                             callsite.function, callsite.file, callsite.linenum))
    333                 else:
    334                     SparkContext._active_spark_context = instance

ValueError: Cannot run multiple SparkContexts at once; existing SparkContext(app=pyspark-shell, master=local[*]) created by __init__ at <ipython-input-7-edf43bdce70a>:33 

  • 进口

from pyspark import SparkConf, SparkContext
  • 我尝试了这种替代方法,但也失败了:
spark = SparkSession(sc).builder.appName("Detecting-Malicious-URL App").getOrCreate()

这是抛出另一个错误,如下所示:

NameError: name 'SparkSession' is not defined

【问题讨论】:

  • 试试这个:从 pyspark.sql 导入 SparkSession

标签: python machine-learning networking pyspark jupyter-notebook


【解决方案1】:

试试这个 -

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("Detecting-Malicious-URL App").getOrCreate()

在 spark 2.0 之前,我们必须创建 SparkConf 和 SparkContext 来与 Spark 交互。

而在 Spark 2.0 中,SparkSession 是 Spark SQL 的入口点。现在我们不需要创建 SparkConf、SparkContext 或 SQLContext,因为它们被封装在 SparkSession 中。

更多详情请参考此博客:How to use SparkSession in Apache Spark 2.0

【讨论】:

  • 如果您的问题得到解决,请接受最合适的答案并关闭此线程。
【解决方案2】:

spark 上下文用于通过资源管理器连接到集群。 sparkConf 是创建 spark 上下文对象所必需的,该对象存储配置参数,如 appName(用于标识您的 spark 驱动程序)、应用程序、内核数和运行在工作节点上的执行程序的内存大小。要使用 Sql、Hive、Streaming 的 API,需要创建单独的上下文。

虽然 SparkSession 提供了与底层 Spark 功能交互的单一入口点,并允许使用 Dataframes 和 API 对 Spark 进行编程。使用 Sql、Hive 等不需要创建单独的会话。

要创建 SparkSession,您可以使用以下构建器

SparkSession.builder.master("local").appName("Detecting-Malicious-URL App") .config("spark.some.config.option", "some-value")

为了克服这个错误

“NameError:名称'SparkSession'未定义”

您可能需要使用包调用,例如

“从 pyspark.sql 导入 SparkSession”

pyspark.sql 支持 spark session,用于创建数据帧或将数据帧注册为表等。

还有上面的错误

(ValueError: 不能同时运行多个 SparkContexts;现有 init 创建的 SparkContext(app=pyspark-shell, master=local[*]) 在:33)

您指定这可能会有所帮助-ValueError: Cannot run multiple SparkContexts at once in spark with pyspark

【讨论】:

  • 是的,我使用的是 pyspark 而不是 pyspark.sql...谢谢
  • 如果这有帮助并且能够解决问题,请选择最合适的答案之一。
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多