繁体   English   中英

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

[英]ImportError: cannot import name 'SparkContext' in IPython

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

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)

我发现问题在于 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

更改文件名并再次运行代码,因为文件名可能与 pyspark 中的内置模块相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM