Azure Databricks中PySpark无法用XSD验证XML文件的问题求助
修复Spark XML读取时的XSD验证路径错误
错误原因
Spark XML库的rowValidationXSDPath参数要求传入executor节点可直接访问的本地路径,你直接使用DBFS路径(dbfs:/mnt/books.xsd)时,executor会将其当作本地磁盘路径查找,导致找不到文件,触发解析错误。
解决方案
Databricks集群默认会把DBFS挂载到节点的/dbfs/目录下,只需将DBFS路径转换为本地挂载路径即可解决问题:
修改后的读取代码
# 将DBFS路径转换为本地挂载路径 local_xsd_path = xsd_Path.replace("dbfs:/", "/dbfs/") df = (spark.read .format("xml") .option("rowTag", "book") .option("rowValidationXSDPath", local_xsd_path) .load(xmlPath)) df.printSchema()
备选方案(适用于无DBFS自动挂载场景)
如果集群未自动挂载DBFS,可通过Spark的addFile方法将XSD文件分发到所有executor的临时目录:
# 分发XSD文件到所有executor spark.sparkContext.addFile(xsd_Path) # 获取executor本地的文件路径 import os local_xsd_path = os.path.join(spark.sparkContext.getLocalDir(), "books.xsd") df = (spark.read .format("xml") .option("rowTag", "book") .option("rowValidationXSDPath", local_xsd_path) .load(xmlPath)) df.printSchema()
内容的提问来源于stack exchange,提问作者Rabindra
相关产品推荐
相关产品推荐

