Azure Databricks:PySpark:无法使用 XSD 验证 XML 文件

问题描述 投票:0回答:1

这就是我所做的。

  1. 创建了一个 XML 文件
xmlPath = "dbfs:/mnt/books.xml"
xmlString = """
  <book id="bk103">
    <author>Corets, Eva</author>
    <title>Maeve Ascendant</title>
  </book>"""
dbutils.fs.put(xmlPath, xmlString, True)
  1. 创建了一个 XSD 文件
xsd_Path = "dbfs:/mnt/books.xsd"
xsd_String = """<?xml version="1.0" encoding="UTF-8" ?>
  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="book">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="author" type="xsd:string" />
          <xsd:element name="title" type="xsd:string" />
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" use="required" />
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>"""

dbutils.fs.put(xsd_Path, xsd_String,True)
  1. 使用选项 rowValidationXSDPath 读取文件
df = (spark.read
    .format("xml")
    .option("rowTag", "book")
    .option("rowValidationXSDPath", xsd_Path)
    .load(xmlPath))
df.printSchema()
  1. 收到错误消息

    org.apache.spark.SparkException:作业因阶段失败而中止:阶段 30.0 中的任务 0 失败 4 次,最近一次失败:阶段 30.0 中丢失任务 0.3 (TID 123) (10.139.64.10 执行器驱动程序): java.util .concurrent.ExecutionException: org.xml.sax.SAXParseException; schema_reference.4:无法读取模式文档'file:/local_disk0/spark-*************/dbfs:/mnt/books.xsd',因为1)找不到该文档; 2)文档无法读取; 3)文档的根元素不是

请协助修复错误。

xml pyspark xsd xml-validation
1个回答
0
投票

您可以使用以下方法将 XSD 文件添加到 SparkContext:

spark.sparkContext.addFile('path/to/your/file.xsd')

这使得该文件在集群中的所有节点上可用。

更多详细信息:https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkContext.addFile.html

© www.soinside.com 2019 - 2024. All rights reserved.