Closed shermilaguerra closed 5 years ago
this is the xml file <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
explode
should be applied to ArrayType
or MapType
not against StructType
.
is there any function to get data from xml with structType? I was thinking to work with XSD instead with XML. Is there a difference between working with XML and XSD file?
@shermilaguerra Oh, yes, there is the issue here - https://github.com/databricks/spark-xml/issues/168
is there any function to get data from xml structType?
You could just access, for example, selectExpr(
ARTIGOPUBLICADO.@ORDEM-IMPORTANCIA)
.
I do not ge the data with selectExpr(ARTIGOPUBLICADO.@ORDEM-IMPORTANCIA
).
you can tell me? In spark-xml reads the xml Datafram in front of the columns why it adds "@"??
I have xml file with alot parse, I able to use "explode" to get data xml. it show exeption. I read xml file data = sqlContext.read.format('com.databricks.spark.xml').options(rowTag='ARTIGOSPUBLICADOS').load("file:///home/cloudera/dayse2.XML") data.printSchema() root |-- ARTIGOPUBLICADO: struct (nullable = true) | |-- @ORDEM-IMPORTANCIA: string (nullable = true) | |-- @SEQUENCIA-PRODUCAO: long (nullable = true) | |-- AREAS-DO-CONHECIMENTO: struct (nullable = true) | | |-- AREA-DO-CONHECIMENTO-1: struct (nullable = true) | | | |-- #VALUE: string (nullable = true) | | | |-- @NOME-DA-AREA-DO-CONHECIMENTO: string (nullable = true) | | | |-- @NOME-DA-ESPECIALIDADE: string (nullable = true) | | | |-- @NOME-DA-SUB-AREA-DO-CONHECIMENTO: string (nullable = true) | | | |-- @NOME-GRANDE-AREA-DO-CONHECIMENTO: string (nullable = true) | | |-- AREA-DO-CONHECIMENTO-2: struct (nullable = true) | | | |-- #VALUE: string (nullable = true) | | | |-- @NOME-DA-AREA-DO-CONHECIMENTO: string (nullable = true) | | | |-- @NOME-DA-ESPECIALIDADE: string (nullable = true) | | | |-- @NOME-DA-SUB-AREA-DO-CONHECIMENTO: string (nullable = true) | | | |-- @NOME-GRANDE-AREA-DO-CONHECIMENTO: string (nullable = true) | | |-- AREA-DO-CONHECIMENTO-3: struct (nullable = true) | | | |-- #VALUE: string (nullable = true) | | | |-- @NOME-DA-AREA-DO-CONHECIMENTO: string (nullable = true) | | | |-- @NOME-DA-ESPECIALIDADE: string (nullable = true) | | | |-- @NOME-DA-SUB-AREA-DO-CONHECIMENTO: string (nullable = true) | | | |-- @NOME-GRANDE-AREA-DO-CONHECIMENTO: string (nullable = true) | |-- AUTORES: array (nullable = true) | | |-- element: struct (containsNull = true) | | | |-- #VALUE: string (nullable = true)
data.select(explode(Data.ARTIGOPUBLICADO)).collect()
it fails with exception:
cannot resolve 'explode(ARTIGOPUBLICADO)' due to data type mismatch: input to function explode should be array or map type, not StructType(StructField(@ORDEM-IMPORTANCIA,StringType,true), StructField(@SEQUENCIA-PRODUCAO,LongType,true), StructField(AREAS-DO-CONHECIMENTO,StructType(StructField(AREA-DO-CONHECIMENTO-1,StructType(StructField(#VALUE,StringType,true), StructField(@NOME-DA-AREA-DO-CONHECIMENTO,StringType,true), StructField(@NOME-DA-ESPECIALIDADE,StringType,true), StructField(@NOME-DA-SUB-AREA-DO-CONHECIMENTO,StringType,true), StructField(@NOME-GRANDE-AREA-DO-CONHECIMENTO,StringType,true)),true), StructField(AREA-DO-CONHECIMENTO-2,StructType(StructField(#VALUE,StringType,true), StructField(@NOME-DA-AREA-DO-CONHECIMENTO,StringType,true), StructField(@NOME-DA-ESPECIALIDADE,StringType,true), StructField(@NOME-DA-SUB-AREA-DO-CONHECIMENTO,StringType,true), StructField(@NOME-GRANDE-AREA-DO-CONHECIMENTO,StringType,true)),true), StructField(AREA-DO-CONHECIMENTO-3,StructType(StructField(#VALUE,StringType,true), StructField(@NOME-DA-AREA-DO-CONHECIMENTO,StringType,true), StructField(@NOME-DA-ESPECIALIDADE,StringType,true), StructField(@NOME-DA-SUB-AREA-DO-CONHECIMENTO,StringType,true), StructField(@NOME-GRANDE-AREA-DO-CONHECIMENTO,StringType,true)),true)),true), StructField(AUTORES,ArrayType(StructType(StructField(#VALUE,StringType,true), StructField(@NOME-COMPLETO-DO-AUTOR,StringType,true), StructField(@NOME-PARA-CITACAO,StringType,true), StructField(@NRO-ID-CNPQ,LongType,true), StructField(@ORDEM-DE-AUTORIA,LongType,true)),true),true), StructField(DADOS-BASICOS-DO-ARTIGO,StructType(StructField(#VALUE,StringType,true), StructField(@ANO-DO-ARTIGO,LongType,true), StructField(@DOI,StringType,true), StructField(@FLAG-DIVULGACAO-CIENTIFICA,StringType,true), StructField(@FLAG-RELEVANCIA,StringType,true), StructField(@HOME-PAGE-DO-TRABALHO,StringType,true), StructField(@IDIOMA,StringType,true), StructField(@MEIO-DE-DIVULGACAO,StringType,true), StructField(@NATUREZA,StringType,true), StructField(@PAIS-DE-PUBLICACAO,StringType,true), StructField(@TITULO-DO-ARTIGO,StringType,true), StructField(@TITULO-DO-ARTIGO-INGLES,StringType,true)),true), StructField(DETALHAMENTO-DO-ARTIGO,StructType(StructField(#VALUE,StringType,true), StructField(@FASCICULO,StringType,true), StructField(@ISSN,LongType,true), StructField(@LOCAL-DE-PUBLICACAO,StringType,true), StructField(@PAGINA-FINAL,LongType,true), StructField(@PAGINA-INICIAL,LongType,true), StructField(@SERIE,LongType,true), StructField(@TITULO-DO-PERIODICO-OU-REVISTA,StringType,true), StructField(@VOLUME,LongType,true)),true), StructField(PALAVRAS-CHAVE,StructType(StructField(#VALUE,StringType,true), StructField(@PALAVRA-CHAVE-1,StringType,true), StructField(@PALAVRA-CHAVE-2,StringType,true), StructField(@PALAVRA-CHAVE-3,StringType,true), StructField(@PALAVRA-CHAVE-4,StringType,true), StructField(@PALAVRA-CHAVE-5,StringType,true), StructField(@PALAVRA-CHAVE-6,StringType,true)),true));
how explode Struct??
Any thoughts? Very Thank for your help.