Databricksにてクラス定義時にノートブックのセル内の行数が多くなることで動作が重くなる事象への対応方法


注意事項

本記事での記載内容は、検証中であるために、何かしらの不具合が発生する可能性があります。
よりよい方法がご存知の方はご教授ください。

概要

Databricksにてクラス定義時にノートブックのセル内の行数が多くなることで動作が重くなる事象への対応方法として、複数に分けたクラスを継承した1つのクラスを定義する方法を共有します。

クラス定義を実施した際にDatabricksにて1セルの行数が1000を超えてしまったため、動作が重くなり開発に支障がでるようになってしまいました。

そこで、下記のような対応を実施しました。

  1. 複数のクラスに分割して、それらを継承したクラスを定義すること
  2. メソッド外で利用するクラス変数(メソッドのデフォルト値等)を最初のクラスで定義すること
  3. メソッド内で利用するクラス変数を継承したクラスで定義すること

詳細は下記のGithub pagesのページをご確認ください。

コードを実行したい方は、下記のdbcファイルを取り込んでください。

https://github.com/manabian-/databricks_tecks_for_qiita/blob/main/tecks/fixed_cell_lengthening_when_defining_a_class/fixed_cell_lengthening_when_defining_a_class.dbc

手順

1. メソッド外で利用するクラス変数(メソッドのデフォルト値等)を保持したクラスを定義

class _VariableTest00:
    _RETURN = None

2. メソッドを保持した2つのクラスを定義

class _VariableTest01: 
    @staticmethod
    def print_test() -> _VariableTest00._RETURN:
        print(VariableTest._test)
class _VariableTest02:
    @staticmethod
    def print_test_2() -> _VariableTest00._RETURN:
        print(VariableTest._test)

3.メソッド内で利用するクラス変数(VariableTest._test)と2つのクラスを継承したクラスを定義

class VariableTest(
    _VariableTest01,
    _VariableTest02,
):
    _test = "AAA"

4. 継承したクラスのメソッドを利用

# _VariableTest01のメソッドを利用
VariableTest.print_test()

# _VariableTest02のメソッドを利用
VariableTest.print_test_2()

5. クラス変数(VariableTest._test)を変更してメソッドを利用

# VarableTestにクラス変数を定義しているため、クラス変数を修正可能
VariableTest._test = 'test'
VariableTest.print_test()