従来のワークスペースを Unity Catalog にアップグレードするときにジョブを更新する
従来のワークスペースを Unity Catalog にアップグレードする場合、アップグレードされたテーブルとファイルパスを参照するように既存のジョブを更新する必要がある場合があります。次の表に、ジョブの更新に関する一般的なシナリオと推奨事項を示します。
ジョブをUnity Catalogに更新するデモについては、「ジョブをUnity Catalogにアップグレードする」を参照してください。
シナリオ  | ソリューション  | 
|---|---|
ジョブは、initスクリプトまたはクラスタリング定義のライブラリを介してカスタムライブラリへの参照を持つノートブックを使用しています。 カスタム ライブラリは、コードに埋め込まれた Apache Spark または SQL の読み取りまたは書き込み操作を実行する、公開されていない   | カスタムライブラリを変更して、次のことを確認します。 
  | 
ジョブは、 Hive metastore テーブルから読み取ったり、テーブルに対して書き込んだりするノートブックを使用しています。  | 
  | 
ジョブは、テーブルのサブフォルダーであるパスに対して読み取りまたは書き込みを行うノートブックを使用しています。これは Unity Catalog では不可能です。  | 
  | 
ジョブは、Unity Catalog に登録されているテーブルであるマウント パスから読み取ったり、マウント パスに書き込んだりするノートブックを使用しています  | 
  | 
ジョブは、マウントパスを介してテーブルではなくファイルを読み書きするノートブックを使用しています。  | 代わりに、ボリュームの場所に書き込むようにコードを変更します。  | 
ジョブは、   | 現在サポートされていません。可能であれば書き直すことを検討するか、サポートが提供されるまでこのジョブのリファクタリングを試みないでください。  | 
ジョブは、連続処理モードを使用するストリーミング ジョブです。  | 連続処理モードは Spark で試験段階であり、Unity Catalog ではサポートされていません。構造化ストリーミングを使用するようにジョブをリファクタリングします。これが不可能な場合は、ジョブを Hive metastoreに対して実行し続けることを検討してください。  | 
ジョブは、チェックポイント・ディレクトリーを使用するストリーミング ジョブです。  | 
  | 
ジョブのクラスタリング定義は 11.3 より Databricks Runtime 未満です。  | 
  | 
ジョブには、ストレージまたはテーブルと対話するノートブックがあります。  | ジョブが実行されていたサービスプリンシパルには、ボリューム、テーブル、外部ロケーションなど、 Unity Catalog内の必要なリソースに対する読み取りおよび書き込みアクセスを提供する必要があります。  | 
ジョブは Lakeflow 宣言型パイプラインです。  | 
  | 
ジョブには、AWSKinesis などの非ストレージクラウドサービスを使用するノートブックがあり、接続に使用される設定ではインスタンスプロファイルが使用されます。  | 
  | 
ジョブは Scala を使用  | 
  | 
ジョブには、Scala UDFsを使用するノートブックがあります  | 
  | 
ジョブに MLR を使用するタスクがあります  | 専用のコンピュートで実行.  | 
ジョブには、グローバルinitスクリプトに依存するクラスタリング構成があります。  | 
  | 
ジョブには、jars/Maven、 Spark 拡張機能、またはカスタム データソース ( Sparkから) を使用するクラスタリング構成またはノートブックがあります。  | 
  | 
ジョブには、PySpark UDFsを使用するノートブックがあります。  | Databricks Runtime 13.2 以降を使用します。  | 
ジョブには、ネットワーク呼び出しを行うPythonコードを含むノートブックがあります。  | Databricks Runtime 12.2 以降を使用します。  | 
ジョブには、Pandas UDF (スカラー) を使用するノートブックがあります。  | Databricks Runtime 13.2 以降を使用します。  | 
ジョブは Unity Catalog ボリュームを使用します。  | Databricks Runtime 13.3 以降を使用します。  | 
ジョブには、   | 
 
 
 setDefaultCatalog の実行  | 
ジョブには、内部 DButils を使用する ノートブック API: コマンド コンテキストと、共有クラスタリングを使用した実行があります。 コマンドを使用してコマンドアクセスにアクセスしようとするワークロード (たとえば、ジョブ ID を取得するために、 
  | 
 Databricks Runtime 13.3 LTS+ が必要です  | 
ジョブには、spark.udf.registerJavaFunctionという PySparkを使用するノートブックがあり、共有クラスタリングを使用して実行されています  | 
  | 
ジョブには RDD を使用するノートブックがあります: sc.parallelize & spark.read.json() を使用して JSON オブジェクトを DF に変換し、共有クラスタリングを使用して実行します。  | 
 例- 以前は: 後:  | 
ジョブにはRDDを使用するノートブックがあります:sc.emptyRDD()を介した空のデータフレームと共有クラスタリングを使用して実行  | 例- 以前は: 後:  | 
ジョブには、RDD を使用するノートブックがあります: mapPartitions (高価な初期化ロジック + 行あたりの操作が安価) と共有クラスタリングを使用して実行されます  | 
 /Unity Catalog プログラムとSpark PythonScalaSparkサーバー間の通信に Connectを使用してクラスタリングを共有し、RDDにアクセスできなくなりました。 以前は: RDD の一般的な使用例は、コストのかかる初期化ロジックを 1 回だけ実行し、その後、行ごとにコストのかかる操作を実行することです。このようなユースケースは、外部サービスの呼び出しや暗号化ロジックの初期化などです。 後: Dataframe API を使用し、PySpark ネイティブの Arrow UDF を使用して RDD 操作を書き換えます。  | 
ジョブには、SparkContext (sc) と sqlContext を使用し、共有クラスタリングを使用して実行するノートブックがあります  | 
 Spark Context (sc) と sqlContext は、共有クラスタリング アーキテクチャと SparkConnect Unity Catalog 設計上は使用できません。 解決方法: spark 変数を使用して SparkSession インスタンスと対話する 制限: Spark JVM には、Python / Scala REPL から直接アクセスすることはできず、Sparkコマンドを介してのみアクセスできます。つまりsc._jvmコマンドは設計上失敗します。 次の sc コマンドはサポートされていません: emptyRDD、range、init_batched_serializer、parallelize、pickleFile、textFile、wholeTextFiles、binaryFiles、binaryRecords、sequenceFile、newAPIHadoopFile、newAPIHadoopRDD、hadoopFile、hadoopRDD、union、runJob、setSystemProperty、uiWebUrl、stop、setJobGroup、setLocalProperty、getConf  | 
ジョブには、 Spark Conf - sparkContext.getConf を使用し、共有クラスタリングを使用して実行するノートブックがあります  | 
 sparkContext、df.sparkContext、sc.sparkContext などの APIs は、設計上は使用できません。 解決方法: 代わりに spark.conf を使用してください  | 
ジョブには、SparkContext - SetJobDescription() を使用し、共有クラスタリングを使用して実行するノートブックがあります  | 
 sc.setJobDescription("文字列")は、共有クラスタリングアーキテクチャとSparkConnect Unity Catalog ため、設計上は使用できません。 解決方法: 可能であれば、代わりにタグを使用してください [PySpark ドキュメント] spark.addTag() はタグをアタッチでき、 getTags() と interruptTag(tag) を使用してタグの有無を操作できます Databricks Runtime 14.1+ が必要です  | 
ジョブには、sc.setLogLevel("INFO") などのコマンドを使用して Spark Log Levels を設定するノートブックと、共有クラスタリングを使用して実行するノートブックがあります  | 
 シングルユーザーおよび分離クラスタリングなしでは、 Spark コンテキストにアクセスして、ドライバーとエグゼキューター間のログレベルを直接動的に設定できます。 共有クラスタリングでは、この方法は Spark コンテキストからアクセスできず、 Databricks Runtime 14+ では Spark コンテキストは使用できなくなりました。 解決方法: log4j.confを提供せずにログレベルを制御するために、クラスタリング設定で Spark 設定値を使用できるようになりました。 クラスタリング設定のSpark設定値として spark.log.level を DEBUG、WARN、INFO、ERROR に設定して、Sparkログレベルを使用します。  | 
ジョブには、深くネストされた式/クエリを使用し、共有クラスタリングを使用して実行するノートブックがあります  | 
 RecursionError / Protobuf の最大ネスト レベルを超えました (深くネストされた式 / クエリの場合) を使用して深くネストされたDataFrames PySparkDataFrameAPIと式を再帰的に作成する場合、場合によっては次のいずれかが発生する可能性があります。 
 解決方法: この問題を回避するには、深くネストされたコードパスを特定し、線形式/サブクエリまたは一時的なビューを使用してそれらを書き換えます。 たとえば、 df.withColumn を再帰的に呼び出す代わりに、 df.withColumns(dict) を呼び出します。  | 
ジョブには、コード内で input_file_name() を使用し、共有クラスタリングを使用して実行するノートブックがあります  | 
 input_file_name() は、共有クラスタリングの Unity Catalog ではサポートされていません。 解決方法: ファイル名を取得するには 
 spark.readで動作します ファイルパス全体を取得するには 
 spark.readで動作します  | 
ジョブには、 DBFS ファイル・システムに対してデータ操作を実行し、共有クラスタリングを使用して実行するノートブックがあります  | 
 FUSEサービスを使用して共有クラスタリングで DBFS を使用すると、ファイルシステムに到達できず、ファイルが見つからないというエラーが発生します 例: 共有クラスタリング アクセスを使用して DBFS が失敗する場合の例を次に示します 解決方法: どちらかを使用します - 
  |