这就是我所做的。
xmlPath = "dbfs:/mnt/books.xml"
xmlString = """
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
</book>"""
dbutils.fs.put(xmlPath, xmlString, True)
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)
df = (spark.read
.format("xml")
.option("rowTag", "book")
.option("rowValidationXSDPath", xsd_Path)
.load(xmlPath))
df.printSchema()
收到错误消息
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)文档的根元素不是
请协助修复错误。
您可以使用以下方法将 XSD 文件添加到 SparkContext:
spark.sparkContext.addFile('path/to/your/file.xsd')
这使得该文件在集群中的所有节点上可用。
更多详细信息:https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkContext.addFile.html