Compreender as diferenças entre os formatos de dados U-SQL e Spark
Importante
O Azure Data Lake Analytics descontinuado a 29 de fevereiro de 2024. Saiba mais com este anúncio.
Para análise de dados, a sua organização pode utilizar o Azure Synapse Analytics ou o Microsoft Fabric.
Se quiser utilizar o Azure Databricks ou o Azure HDInsight Spark, recomendamos que migre os seus dados do Azure Data Lake Storage Gen1 para o Azure Data Lake Storage Gen2.
Além de mover os seus ficheiros, também irá querer tornar os seus dados, armazenados em tabelas U-SQL, acessíveis ao Spark.
Mover dados armazenados em ficheiros do Azure Data Lake Storage Gen1
Os dados armazenados em ficheiros podem ser movidos de várias formas:
- Escreva um pipeline de Azure Data Factory para copiar os dados da conta Azure Data Lake Storage Gen1 para a conta de Azure Data Lake Storage Gen2.
- Escreva uma tarefa do Spark que leia os dados da conta Azure Data Lake Storage Gen1 e os escreva na conta Azure Data Lake Storage Gen2. Com base no seu caso de utilização, poderá querer escrevê-lo num formato diferente, como Parquet, se não precisar de preservar o formato de ficheiro original.
Recomendamos que reveja o artigo Atualizar as soluções de análise de macrodados do Azure Data Lake Storage Gen1 para o Azure Data Lake Storage Gen2
Mover dados armazenados em tabelas U-SQL
As tabelas U-SQL não são compreendidas pelo Spark. Se tiver dados armazenados em tabelas U-SQL, irá executar uma tarefa U-SQL que extrai os dados da tabela e os guarda num formato que o Spark compreende. O formato mais adequado é criar um conjunto de ficheiros Parquet seguindo o esquema de pastas do metastore do Hive.
A saída pode ser obtida em U-SQL com o outputter Parquet incorporado e com a criação de partições de saída dinâmica com conjuntos de ficheiros para criar as pastas de partição. Processar mais ficheiros do que nunca e utilizar o Parquet fornece um exemplo de como criar esses dados consumíveis do Spark.
Após esta transformação, copia os dados conforme descrito no capítulo Mover dados armazenados em ficheiros Azure Data Lake Storage Gen1.
Limitações
Semântica de dados Ao copiar ficheiros, a cópia ocorrerá ao nível do byte. Assim, os mesmos dados devem aparecer na conta Azure Data Lake Storage Gen2. No entanto, tenha em atenção que o Spark pode interpretar alguns carateres de forma diferente. Por exemplo, pode utilizar uma predefinição diferente para um delimitador de linhas num ficheiro CSV. Além disso, se estiver a copiar dados digitados (de tabelas), o Parquet e o Spark poderão ter uma precisão e dimensionamento diferentes para alguns dos valores digitados (por exemplo, um flutuante) e podem tratar valores nulos de forma diferente. Por exemplo, U-SQL tem a semântica C# para valores nulos, enquanto o Spark tem uma lógica de três valores para valores nulos.
As tabelas U-SQL da organização de dados (criação de partições) fornecem duas partições de nível. O nível externo (
PARTITIONED BY
) é por valor e mapeia principalmente para o esquema de criação de partições hive/Spark com hierarquias de pastas. Terá de garantir que os valores nulos estão mapeados para a pasta correta. O nível interno (DISTRIBUTED BY
) no U-SQL oferece quatro esquemas de distribuição: round robin, intervalo, hash e hash direto. As tabelas Hive/Spark apenas suportam a criação de partições de valores ou hashes através de uma função hash diferente de U-SQL. Ao exportar os dados da tabela U-SQL, provavelmente só conseguirá mapear para a criação de partições de valores para o Spark e poderá ter de efetuar mais ajustes ao esquema de dados, consoante as consultas finais do Spark.
Passos seguintes
- Compreender os conceitos de código do Spark para programadores de U-SQL
- Atualizar as soluções de análise de macrodados do Azure Data Lake Storage Gen1 para o Azure Data Lake Storage Gen2
- .NET para Apache Spark
- Transformar dados com a atividade do Spark no Azure Data Factory
- Transformar dados com a atividade do Hive do Hadoop no Azure Data Factory
- O que é o Apache Spark no Azure HDInsight