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:

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