Compartilhar via


Entender as diferenças entre os formatos de dados U-SQL e Spark

Importante

O Azure Data Lake Analytics desativado em 29 de fevereiro de 2024. Saiba mais nesse comunicado.

Para análise de dados, sua organização pode usar o Azure Synapse Analytics ou o Microsoft Fabric.

Para usar o Azure Databricks ou o Azure HDInsight Spark, recomenda-se migrar os dados do Azure Data Lake Storage Gen1 para o Azure Data Lake Storage Gen2.

Além de mover seus arquivos, também é recomendado tornar seus dados armazenados nas tabelas U-SQL acessíveis para o Spark.

Mover dados armazenados em arquivos do Azure Data Lake Storage Gen1

Os dados armazenados em arquivos podem ser movidos de várias maneiras:

Recomenda-se ler o artigo Atualizar suas soluções de análise de Big Data 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 você tiver dados armazenados nelas, execute um trabalho U-SQL que os extrai e salva em um formato com suporte no Spark. O formato mais apropriado é criar um conjunto de arquivos Parquet seguindo o layout da pasta do metastore do Hive.

A saída pode ser obtida no U-SQL com o outputter interno de Parquet e usando o particionamento dinâmico de saídas com conjuntos de arquivos para criar as pastas de partição. Processar mais arquivos do que nunca e usar o Parquet fornece um exemplo de como criar esses dados consumíveis do Spark.

Após essa transformação, você copia os dados, conforme descrito no capítulo Mover os dados armazenados em arquivos do Azure Data Lake Storage Gen1.

Advertências

  • Semântica de dados - A cópia de arquivos ocorrerá no nível de byte. Portanto, os mesmos dados devem ser exibidos na conta do Azure Data Lake Storage Gen2. No entanto, observe que o Spark pode interpretar alguns caracteres de forma diferente. Por exemplo, ele pode usar um padrão diferente para um delimitador de linha em um arquivo CSV. Além disso, ao copiar dados digitados (de tabelas), o Parquet e o Spark podem ter precisão e escala diferentes para alguns deles (por exemplo, um float) e podem tratar valores nulos de forma diferente. Por exemplo, o U-SQL tem a semântica C# para os valores nulos, mas o Spark tem uma lógica de três valores para eles.

  • As tabelas U-SQL de organização de dados (particionamento) fornecem particionamento de dois níveis. O nível externo (PARTITIONED BY) é baseado em valor, além de ser mapeado principalmente para o esquema de particionamento do Hive/Spark com o uso de hierarquias de pastas. Você precisará garantir que os valores nulos sejam mapeados para a pasta certa. O nível interno (DISTRIBUTED BY) no U-SQL oferece quatro esquemas de distribuição: round robin, intervalo, hash e hash direto. As tabelas do Hive/Spark dão suporte apenas ao particionamento de valor ou de hash, com uma função de hash diferente do U-SQL. Ao gerar os dados da tabela U-SQL, você provavelmente só poderá mapear para o particionamento de valor para Spark e talvez precise fazer um ajuste adicional do layout de dados, dependendo das consultas finais do Spark.

Próximas etapas