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
iPython (python 2) - ImportError: No module named model_selection