Я читаю xml-файл, используя зависимость databricks-spark-xml в scala-spark (intellij). Я предоставляю схему и опцию ("mode", "PERMISSIVE")
.option ("columnNameOfCorruptRecord", "_BAD_record") то же имя также присутствует в схеме. Когда spark читает xml-файл, он создает искаженную запись как ноль и не помещает ее в столбец _BAD_record, это приводит к потере данных, которую мое программное обеспечение не может себе позволить. Помогите! Также заранее спасибо ...
не может использовать inferschema, потому что это приведет к несоответствию всех типов данных в виде строки, и все записи будут отклонены для дальнейшей проверки в дальнейшем в конвейере.
Также попытался сгенерировать схему из SchemaConverter из org.zalando.spark.jsonSchema, безуспешно, клиент предпочитает этот метод
object SecondXmlScalaObject {
val schema = new StructType().add("AccountOwner", new StructType().add("Primary", new StructType().add("CISInfo", new StructType().add("CustomerNumber", LongType))
.add("FirstName", StringType)
.add("LastName", StringType)
.add("CurrentAddress", new StructType().add("City", StringType)
.add("State", StringType)
.add("Street2", StringType)
.add("Zip", LongType))))
.add("BankNumber", StringType)
.add("DepositAccountNumber", StringType)
.add("ProductMarketingName", StringType)
.add("_BAD_RECORDS",StringType)
def main(args: Array[String]) = {
val conf = new SparkConf()
.setAppName("xmlSparkEval")
.setMaster("local")
val sc = new SparkContext(conf);
val spark = SparkSession.builder().getOrCreate()
val fileContents = Source.fromFile("/resources/jsonschema.json").getLines.mkString
val schema1 = SchemaConverter.convertContent(fileContents)
val df = spark.read.format("com.databricks.spark.xml")
.option("rowTag", "PrintApplication")
.option("ignoreSurroundingSpaces", true)
.option("treatEmptyValuesAsNulls", true)
.option("mode", "PERMISSIVE")
.option("columnNameOfCorruptRecord", "_BAD_record")
.schema(schema)
//.schema(schema1)
.load("abc.xml")
df.printSchema()
df.show(false)
}
}
фактические (неприемлемые) результаты: для неправильно сформированной xml-записи все столбцы становятся нулевыми в кадре данных
допустимо: неправильно сформированные (отсутствующие теги) записи должны быть помещены в _BAD_RECORDS