Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
将 旧工作区升级到 Unity 目录时,可能需要更新现有作业以引用升级后的表和文件路径。 下表列出了更新作业的典型方案和建议。
有关将作业更新到 Unity 目录的演示,请参阅 将作业升级到 Unity 目录。
| 情景 | 解决方案 |
|---|---|
| 作业使用通过初始化脚本或群集定义的库引用自定义库的笔记本。 自定义库将定义为非公开可用的 pip 包或 jar,该包或 jar 执行嵌入在其代码中的 Apache Spark 或 SQL 读取或写入作。 |
修改自定义库以确保:
|
| 作业使用读取或写入 Hive 元存储表的笔记本。 |
|
| 作业使用从表子文件夹读取或写入路径的笔记本。 这在 Unity 目录中是不可能的。 |
|
| 作业使用正在读取或写入到在 Unity 目录中注册的表的装载路径的笔记本 |
|
| 作业使用通过装载路径读取或写入文件(而不是表)的笔记本。 | 请改为更改代码以写入卷位置。 |
作业是一个流式处理作业,它使用 applyInPandasWithState。 |
当前不支持。 如果可能,请考虑重写,或在提供支持之前不尝试重构此作业。 |
| 作业是使用连续处理模式的流式处理作业。 | 连续处理模式在 Spark 中是实验性的,在 Unity 目录中不受支持。 重构作业以使用结构化流式处理。 如果无法执行此作,请考虑使作业针对 Hive 元存储运行。 |
| 作业是使用检查点目录的流式处理作业。 |
|
| 作业的群集定义低于 Databricks Runtime 11.3。 |
|
| 作业具有与存储或表交互的笔记本。 | 作业运行的服务主体必须提供对 Unity 目录中必需资源的读取和写入访问权限,例如卷、表、外部位置等。 |
| 作业是 Lakeflow 声明性管道。 |
|
| 作业具有使用非存储云服务(如 AWSKinesis)的笔记本,以及用于连接的配置使用实例配置文件。 |
|
| 作业使用 Scala |
|
| 作业具有使用 Scala UDF 的笔记本 |
|
| 作业具有使用 MLR 的任务 | 在专用计算上运行。 |
| 作业具有依赖于全局初始化脚本的群集配置。 |
|
| 作业具有使用 jars/Maven、Spark 扩展或自定义数据源(从 Spark)的群集配置或笔记本。 |
|
| 作业具有使用 PySpark UDF 的笔记本。 | 使用 Databricks Runtime 13.2 或更高版本。 |
| 作业具有具有进行网络调用的 Python 代码的笔记本。 | 使用 Databricks Runtime 12.2 或更高版本。 |
| 作业具有使用 Pandas UDF(标量)的笔记本。 | 使用 Databricks Runtime 13.2 或更高版本。 |
| 作业将使用 Unity 目录卷。 | 使用 Databricks Runtime 13.3 或更高版本。 |
作业具有使用 spark.catalog.X (tableExists、 listTables、 setDefaultCatalog)并使用共享群集运行的笔记本 |
|
| 作业具有使用内部 DButils API 的笔记本:命令上下文,并使用共享群集运行。 尝试访问命令访问权限的工作负荷,例如,使用 dbutils.notebook.entry_point.getDbutils().notebook().getContext().toJson() |
使用 .toJson() 而非 .safeToJson()。 这会提供可在共享群集上安全共享的所有命令上下文信息的子集。需要 Databricks Runtime 13.3 LTS+ |
| 作业具有使用 PySpark 的笔记本:spark.udf.registerJavaFunction 并使用共享群集运行 |
|
| 作业具有使用 RDD 的笔记本:sc.parallelize 和 spark.read.json() 将 JSON 对象转换为 DF 并使用共享群集运行 |
例- 之前: json_content1 = "{'json_col1': 'hello', 'json_col2': 32}"json_content2 = "{'json_col1': 'hello', 'json_col2': 'world'}"json_list = []json_list.append(json_content1)json_list.append(json_content2)df = spark.read.json(sc.parallelize(json_list))display(df)之后: from pyspark.sql import Rowimport json# Sample JSON data as a list of dictionaries (similar to JSON objects)json_data_str = response.textjson_data = [json.loads(json_data_str)]# Convert dictionaries to Row objectsrows = [Row(**json_dict) for json_dict in json_data]# Create DataFrame from list of Row objectsdf = spark.createDataFrame(rows)df.display() |
| 作业具有使用 RDD 的笔记本:通过 sc.emptyRDD() 使用空数据帧并使用共享群集运行 | 例- 之前: val schema = StructType( StructField("k", StringType, true) :: StructField("v", IntegerType, false) :: Nil)spark.createDataFrame(sc.emptyRDD[Row], schema)之后: import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}val schema = StructType( StructField("k", StringType, true) :: StructField("v", IntegerType, false) :: Nil)spark.createDataFrame(new java.util.ArrayList[Row](), schema)from pyspark.sql.types import StructType, StructField, StringTypeschema = StructType([StructField("k", StringType(), True)])spark.createDataFrame([], schema) |
| 作业具有使用 RDD 的笔记本:mapPartitions(成本高昂的初始化逻辑 + 每行更便宜的作),并使用共享群集运行 |
|
| 作业具有使用 SparkContext (sc) 和 sqlContext 的笔记本,并使用共享群集运行 |
|
| 作业具有使用 Spark Conf 的笔记本 - sparkContext.getConf 并使用共享群集运行 |
|
| 作业具有使用 SparkContext - SetJobDescription() 的笔记本,并使用共享群集运行 |
|
| 作业具有使用命令(如 sc.setLogLevel(“INFO”)设置 Spark 日志级别的笔记本,并使用共享群集运行 |
|
| 作业具有使用深度嵌套表达式/查询并使用共享群集运行的笔记本 |
|
| 作业具有在代码中使用 input_file_name() 的笔记本,并使用共享群集运行 |
|
| 作业具有对 DBFS 文件系统执行数据作并使用共享群集运行的笔记本 |
|