我在JupyterLab中尝试从另一个内部运行一个PySpark笔记本,但我不断收到错误消息
ModuleNotFoundError: No module named 'pyspark'
这里的目标是拥有一个文件来设置配置,例如架构定义和功能,可以从使用这些定义执行不同任务的其他笔记本中调用这些文件。在下面的示例中,配置保留模式定义等,而dataload是执行任务的记事本之一的简化版本。
在这种情况下,数据加载记事本必须运行配置记事本,以设置将用于加载数据的架构。
Configuration.ipynb
# Initialization
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('X').getOrCreate()
和
# environment setup
from pyspark.sql import functions
from pyspark.sql.types import StructType, StructField
from pyspark.sql.types import DoubleType, IntegerType, StringType, DateType
ex_schema = StructType([
StructField("graph_sid",StringType()),
.....
StructField("pack_qty", DoubleType())
])
DataLoad.ipynb
# Initialization
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('X').getOrCreate()
%run Configuration.ipynb
我收到以下错误:-
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
~/work/Configuration_FL.ipynb in <module>
1 # Initialization
----> 2 from pyspark.sql import SparkSession
3 spark = SparkSession.builder.appName('X').getOrCreate()
ModuleNotFoundError: No module named 'pyspark'
如果我在一个笔记本中运行所有代码,则效果很好。
我在配置文件中尝试了不同的设置,例如删除了#Initialization部分,这似乎会产生不同的错误。
在 napoleon_borntoparty 的建议下,我尝试了在同一个内核中同时打开它们。这使我可以从配置记事本中的数据加载中访问定义,但反过来则不能。
答案 0 :(得分:0)
检查两个笔记本是否使用相同的kernel
。在相应的笔记本中,单击Kernel -> Change kernel
,然后为每个笔记本选择相同的kernel
。将内核视为包含模块和软件包的虚拟环境。
如果这不起作用,请在您提到的initialisation
上提供更多数据。