【发布时间】:2021-02-02 16:54:23
【问题描述】:
我可以使用kedro run 命令毫无问题地运行我的管道。出于某种原因,尽管我无法再从 Jupyter Notebook 访问我的上下文和目录。当我运行kedro jupyter notebook 并在选择“新建”时使用我的项目名称启动一个新的(或现有的)笔记本时,我收到以下错误:
context
NameError: name 'context' is not defined
catalog.list()
NameError: name 'catalog' is not defined
编辑:
运行魔术命令%kedro_reload 后,我可以看到我的 ProjectContext init_spark_session 正在查找 project_name/notebooks 中的文件,而不是 project_name/src。我尝试使用 %cd ../src 和 os.ch_dir('../src') 在 Jupyter Notebook 会话中更改工作目录,但 kedro 仍然在 notebooks 文件夹中查找:
%kedro_reload
java.io.FileNotFoundException: File file:/Users/user_name/Documents/app_name/kedro/notebooks/dist/project_name-0.1-py3.8.egg does not exist
_spark_session.sparkContext.addPyFile() 找错地方了。当我从我的 ProjectContext 中注释掉这一行时,这个错误消失了,但我收到另一个关于在尝试从目录中加载数据集时无法找到我的 Oracle 驱动程序:
df = catalog.load('dataset')
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
编辑 2:
供参考:
kedro/src/project_name/context.py
def init_spark_session(self) -> None:
"""Initialises a SparkSession using the config defined in project's conf folder."""
# Load the spark configuration in spark.yaml using the config loader
parameters = self.config_loader.get("spark*", "spark*/**")
spark_conf = SparkConf().setAll(parameters.items())
# Initialise the spark session
spark_session_conf = (
SparkSession.builder.appName(self.package_name)
.enableHiveSupport()
.config(conf=spark_conf)
)
_spark_session = spark_session_conf.getOrCreate()
_spark_session.sparkContext.setLogLevel("WARN")
_spark_session.sparkContext.addPyFile(f'src/dist/project_name-{__version__}-py3.8.egg')
kedro/conf/base/spark.yml:
# You can define spark specific configuration here.
spark.driver.maxResultSize: 8g
spark.hadoop.fs.s3a.impl: org.apache.hadoop.fs.s3a.S3AFileSystem
spark.sql.execution.arrow.pyspark.enabled: true
# https://kedro.readthedocs.io/en/stable/11_tools_integration/01_pyspark.html#tips-for-maximising-concurrency-using-threadrunner
spark.scheduler.mode: FAIR
# JDBC driver
spark.jars: drivers/ojdbc8-21.1.0.0.jar
【问题讨论】:
-
你能检查一下你是否可以在笔记本中运行
%reload_kedro魔法命令吗? -
@RahulKumar 这让我找到了真正的问题,只是还没有解决方案......查看我的编辑
-
如果要将工作目录设置为
src,可以运行os.chdir('../src') -
@RahulKumar 不幸的是,在我 os.chdir 之后,该项目仍在 notebooks 文件夹中
-
这很奇怪。关于
ClassNotFoundException在spark.yaml 中添加这个配置spark.jars: <some_path>/ojdbc8.jarojdbc8.jar 可以在这个zip 文件download.oracle.com/otn_software/linux/instantclient/211000/… 中找到我不认为add pyfile 将适用于罐子。
标签: kedro