ImportError:无法在 IPython 中导入名称“SparkContext”

Posted

技术标签:

【中文标题】ImportError:无法在 IPython 中导入名称“SparkContext”【英文标题】:ImportError: cannot import name 'SparkContext' in IPython 【发布时间】:2019-08-23 10:12:59 【问题描述】:

我正在 AWS EC2 上运行 PySpark 脚本。它在 Jupyter notebook 上运行得很好,但是当我在 IPython shell 上运行它时,它会出现导入错误。它看起来很奇怪!有人可以帮忙吗,拜托。 这是代码的sn-p:

from  __future__ import division
 from pyspark import SparkContext
 from pyspark.sql import SQLContext,SparkSession
 from pyspark.sql.functions import lower, col,trim,udf,struct,isnan,when
 from pyspark.sql.types import StructType, StructField, IntegerType, 
 StringType,FloatType,ArrayType,Row
 from pyspark.sql.functions import lit
 import gc
 import time
 import pandas as pd
 from collections import defaultdict
 import numpy as np

 sc = SparkContext(appName="Connect Spark with Redshift")
 sql_context = SQLContext(sc)
 sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", 'xyz')
 sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", 'pqr')

 spark=SparkSession.builder.master("local").appName("Users").getOrCreate()
 users=pd.read_pickle(candidate_users_path)
 sqlCtx = SQLContext(sc)
 users = sqlCtx.createDataFrame(users)
 users.count()

它在导入语句(第 2 行)处给出错误。有趣的是,它在从同一位置启动的 Jupyter notebook 上运行得非常漂亮。而且,如果我只是在 IPython 中执行该导入语句,则相同的导入语句正在工作。在我的理解中,这个EC2作为worker和master,那么它怎么可能在worker中不可用呢? Py4JJavaError: An error occurred while calling o57.count. : org.apache.spark.SparkException: Job aborted due to stage failure: Task 5 in stage 0.0 failed 1 times, most recent failure: Lost task 5.0 in stage 0.0 (TID 5, localhost, executor driver): org.apache.spark.SparkException: Error from python worker ImportError: cannot import name 'SparkContext' PYTHONPATH was: /home/ubuntu/spark-2.4.3-bin-hadoop2.7/python/lib/pyspark.zip:/home/ubuntu/spark-2.4.3-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip:/home/ubuntu/spark-2.4.3-bin-hadoop2.7/jars/spark-core_2.11-2.4.3.jar org.apache.spark.SparkException: No port number in pyspark.daemon's stdout at org.apache.spark.api.python.PythonWorkerFactory.startDaemon(PythonWorkerFactory.scala:204) at org.apache.spark.api.python.PythonWorkerFactory.createThroughDaemon(PythonWorkerFactory.scala:122) at org.apache.spark.api.python.PythonWorkerFactory.create(PythonWorkerFactory.scala:95) at org.apache.spark.SparkEnv.createPythonWorker(SparkEnv.scala:117)

【问题讨论】:

您可以发布您正在使用的代码的 sn-p 吗? 【参考方案1】:

我发现问题在于 Spark 使用的是旧版本的 Python。在bashrc 中添加了以下行。 alias python=python3

bashrc 中的其他行包括:

export SPARK_HOME="/home/ubuntu/spark-2.4.3-bin-hadoop2.7"

export PYSPARK_PYTHON=/usr/bin/python3

export PYSPARK_DRIVER_PYTHON=/usr/bin/python3

【讨论】:

以上是关于ImportError:无法在 IPython 中导入名称“SparkContext”的主要内容,如果未能解决你的问题,请参考以下文章

安装 iPython:“ImportError 无法导入名称路径”?

IPython Notebook 抛出 ImportError – IPython 不会

ImportError:无法导入名称“_safe_split”

IPython ipyparallel map_sync ImportError

ImportError:无法导入名称 a_class

iPython (python 2) - ImportError: No module named model_selection