top of page

Posts do fórum

gregory.toledo
21 de mar. de 2023
In Big Data
Ao trabalhar com dados no PySpark, é essencial entender o conceito de schemas. Um schema é uma descrição da estrutura de um conjunto de dados, que especifica o nome das colunas, o tipo de dados de cada coluna e outras informações relevantes. Schemas são importantes porque permitem que o PySpark entenda como os dados estão estruturados, o que permite realizar operações como filtragem, agregação, transformação e visualização. Importância dos Schemas Schemas são importantes porque permitem que o PySpark entenda como os dados estão estruturados. Sem um schema, o PySpark teria que adivinhar como os dados estão organizados, o que pode levar a erros e ineficiências. Além disso, sem um schema, o PySpark não sabe o tipo de dados de cada coluna, o que pode levar a erros de tipo e a perda de precisão. Ao fornecer um schema para os dados, você pode garantir que o PySpark entenda como os dados estão organizados e possa executar operações de forma mais eficiente e precisa. Além disso, definir um schema pode ajudar a garantir que os dados sejam consistentes e estruturados corretamente. Criando Schemas no PySpark No PySpark, existem várias maneiras de criar schemas. A seguir, veremos algumas das maneiras mais comuns: 1. Inferência de esquema A inferência de esquema é uma técnica que permite que o PySpark tente adivinhar o esquema dos dados com base nos dados de entrada. Essa técnica pode ser útil quando você não tem informações sobre o esquema dos dados, mas pode levar a esquemas imprecisos ou incompletos. A inferência de esquema pode ser feita automaticamente pelo PySpark ao ler um arquivo JSON ou CSV, por exemplo. 2. Esquema manual Neste exemplo, primeiro definimos manualmente o esquema do DataFrame usando a classe StructType e os tipos de dados StructField, IntegerType e StringType. Em seguida, criamos uma SparkSession. Finalmente, usamos o método spark.read.schema() para ler o arquivo JSON e criar um DataFrame com o esquema personalizado. Note que neste exemplo definimos um esquema com três colunas: "id", "nome" e "idade". A primeira coluna é do tipo inteiro e é obrigatória (não pode ser nula), enquanto as outras duas colunas são do tipo string e inteiro, respectivamente, e são opcionais. 3. Esquema utilizando fromJson. O código abaixo é uma abordagem útil para recuperar o schema de um DataFrame existente e reutilizá-lo para criar outro DataFrame com a mesma estrutura. Ao chamar o método "schema.json()" no DataFrame "df3", o schema é retornado como uma string em formato JSON. Em seguida, a string JSON é analisada usando o método "json.loads()" e passada para o construtor do "StructType", que cria uma instância da classe "StructType" com a mesma estrutura de colunas e tipos de dados do schema original. Essa abordagem é especialmente útil quando se trabalha com conjuntos de dados complexos que possuem muitas colunas e tipos de dados diferentes, pois permite a reutilização do schema sem a necessidade de definir manualmente cada coluna e tipo de dados novamente. 4. Esquema utilizando recursiveFileLookup. O código abaixo usa o recurso de inferência de schema do Spark para criar o schema de um DataFrame. Essa abordagem pode ser útil em alguns casos, especialmente quando se trabalha com arquivos JSON com estruturas simples e uniformes. No entanto, a inferência de schema pode não ser precisa o suficiente para capturar todas as nuances e detalhes dos dados, especialmente em arquivos JSON complexos ou com estruturas irregulares. Além disso, a inferência de schema pode levar a erros e problemas de desempenho em casos em que o schema não é inferido corretamente. Portanto, a utilização de um schema manual ou da metodologia de schema do PySpark pode ser uma abordagem mais segura e precisa para a definição do schema do DataFrame. Em conclusão, o uso de Schema é fundamental para a organização e otimização de dados em sistemas de gerenciamento de banco de dados e ferramentas de análise de dados, como o Spark. Ao definir a estrutura e o tipo de dados de um conjunto de dados, o Schema ajuda a garantir que os dados sejam armazenados e manipulados corretamente, evitando erros e melhorando a eficiência do processamento. No entanto, é importante lembrar que a escolha dos casos que serão analisados deve ser feita com cautela, a fim de garantir que o Spark atenda às necessidades específicas da pessoa que busca essas informações. Além disso, a implementação de um Schema pode exigir esforços adicionais de desenvolvimento, mas o resultado final é um ambiente de dados mais estruturado e confiável
Entendendo Schemas no PySpark content media
3
0
546
gregory.toledo
28 de fev. de 2023
In Linguagem de programação
INTRODUÇÃO Esse artigo tem como proposta abordar o tema de manipulação de arquivos XML, passando por várias possibilidades de interação, indo desde bibliotecas como beautiful soup e element tree, a opções que trazem uma melhor dinâmica. O XML, ou "Extensible Markup Language" (Linguagem de Marcação Extensível) tem suas origens na década de 70, no qual tem como seu ancestral o GML, ou “Geography Markup Language” (Linguagem de marcação geográfica), que foi criado com o objetivo de armazenar maiores quantidades de informações, esse modelo foi padronizado pela ISO em meados de 1986, Surgindo a SGML, mostrando que o código GML poderia ser mais versátil e poderoso. Exemplo de código GML: Pouco tempo depois, em 1989 surgiu o popular HTML (Hypertext Markup Language - linguagem de marcação de hipertexto), derivado do XML, a linguagem é uma das mais usadas do mundo por ser utilizada na criação de sites, em 1994 a W3C³ (world wide web consortium - consórcio da www) resolveu formalizar as regras do HTML, e como ele não cumpriu tudo que propunha, o XML surge em 1996 com o objetivo de transacionar dados de forma dinâmica e organizada, tornando-se um dos tipos de linguagem mais populares do inicio do século XXI. Mais tarde, surgiram diversas variações do XML, não citaremos aqui, mas seguirão abaixo como exemplo na imagem: Obs: Para complementar, o json surgiu como uma alternativa ao XML no início dos anos 2000, e hoje em dia pode se dizer que ele e outros tipos de arquivos ajudaram a levar o XML ao caminho do desuso, por maior facilidade de interação com os dados, o método de tag’s acabou sendo menos atraente, mas a linguagem ainda é muito utilizada por diversos sistemas. Para finalmente caminharmos com os códigos e exemplos, vamos explanar melhor o que é o XML, ele é uma linguagem formada por tag’s, muito utilizada por maquinários e muitos sites de prefeituras, para integração de notas fiscais por exemplo. Cada tag contém uma pequena informação que será útil para analise, podendo ter namespaces (um subtítulo de tag), tag’s repetidas (o que não ajuda ao analisar esse tipo de documento) e entre outros objetos. MANIPULAÇÃO Finalmente, vamos ao que interessa e ver como o XML consegue interagir com o python, a fim de gerar valor aos dados que ele armazena. Para isso, vamos aos tópicos: Element Tree: Element tree é uma biblioteca python padrão, para análise e manipulação de arquivos XML, com ela é possível criar, ler e manipular o arquivo, além disso ela tem diversos métodos e classes que facilitam sua utilização, além de sua extensa documentação. Exemplo de código python com element tree: <?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank>1</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank>4</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank>68</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data> #Lendo o arquivo import xml.etree.ElementTree as ET tree = ET.parse('country_data.xml') root = tree.getroot() #Imprimindo os objetos for child in root: print(child.tag, child.attrib) country {'name': 'Liechtenstein'} country {'name': 'Singapore'} country {'name': 'Panama'} #navegando aos itens com index root[0][1].text '2008' Beautiful Soup: Beautiful Soup é uma biblioteca Python para análise de dados HTML e XML. Ele fornece uma interface de alto nível para extrair informações de páginas da web e outros documentos estruturados. Com Beautiful Soup, você pode analisar documentos HTML e XML e extrair informações específicas do documento, como tags, atributos e conteúdo de texto. Você também pode navegar pela estrutura do documento, acessando facilmente os elementos pai, filho e irmão. De modo geral, ela é bem similar ao seu funcionamento e sintaxes em relação ao element tree, se você precisa trabalhar principalmente com documentos XML, element tree pode ser uma escolha mais adequada. Se você precisa trabalhar, ou está mais adaptado com documentos HTML(principalmente) e XML e precisa de uma API fácil de usar para navegação e extração de dados, Beautiful Soup pode ser uma melhor escolha. xmltodict: xmltodict na minha opinião é uma grande alternativa se você deseja acelerar sua análise dos dados e não necessita se aprofundar demais nas tag’s, essa biblioteca é capaz de ler os XML e já estrutura-los em objetos python com dicionários e listas, agilizando o acesso ao dado para seguir com os próximos passos do projeto, ou até mesmo transformar objetos python em XML, ela também traz essa possibilidade. Criando o objeto python com xml: Criando o arquivo xml a partir de um objeto python: Existem diversas outras maneiras de manipular esse tipo de arquivo, mas trouxemos as mais populares para facilitar sua decisão, e, para agregar ainda mais ao conhecimento, teremos abaixo um caso de uso encontrado em um ambiente produtivo, no qual tínhamos arquivos XML, mas não era possível acessar os mesmos via python, por configurações do ambiente e dificuldades da liberação com o cliente, então tivemos de encontrar uma medida paliativa, por estarmos em um ambiente de cloud azure, convertemos o arquivo XML para parquet, através do integrate do Azure synapse pipelines, lemos esses arquivos parquet com o spark, através de um objeto dataframe, no qual recebia duas colunas, uma contendo a chave de nota fiscal coletada em separado do xml para identificar a nota fiscal, e a outra coluna uma string com todo o restante das tag’s já transformadas em uma sintaxe json, e com isso, através do método json.loads(), transformamos essa string em um objeto python, e depois seguimos com as devidas transformações. Segue código: Primeiro ocorre a leitura do dataframe no arquivo parquet: Depois podemos ver a transformação desse dataframe em listas, nas quais são coletadas as strings e carregadas como objetos python no final: E assim, temos como resultado a seguinte lista: CONCLUSÃO Arquivos XML foram revolucionários quando surgiram e ainda tem grande importância, porém suas limitações vêm atrapalhando com as atuais necessidades no mercado de dados, pois apresentam maiores dificuldades quando precisamos acessa-lo, manipula-lo, mas é extremamente importante que saibamos lidar com ele quando necessário, então ainda é um importante objeto de estudo.
Manipulação de XML com Python content media
4
0
83

gregory.toledo

Mais ações
bottom of page