2

我可以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。我尝试在 Jupyter Notebook 会话中更改工作目录,%cd ../srcos.ch_dir('../src')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
4

1 回答 1

0

我认为这两者的结合可能会对您有所帮助:

  • 一般来说,我们尽量避免手动干扰当前工作目录,所以让我们os.chdir在你的笔记本中删除。尽可能构造绝对路径。
  • 在您的init_spark_session, whenaddPyFile中,请改用绝对路径。self.project_path指向您的 Kedro 项目的根目录,因此您可以使用它来相应地构造 PyFile 的路径,例如_spark_session.sparkContext.addPyFile(f'{self.project_path}/src/dist/project_name-{__version__}-py3.8.egg')

不知道为什么你需要添加 PyFile,但也许你有一个特定的原因。

于 2021-02-03T00:27:17.257 回答