Share via


Förstå skillnader mellan U-SQL- och Spark-dataformat

Viktigt

Azure Data Lake Analytics drog sig tillbaka den 29 februari 2024. Läs mer med det här meddelandet.

För dataanalys kan din organisation använda Azure Synapse Analytics eller Microsoft Fabric.

Om du vill använda antingen Azure Databricks eller Azure HDInsight Spark rekommenderar vi att du migrerar dina data från Azure Data Lake Storage Gen1 till Azure Data Lake Storage Gen2.

Förutom att flytta dina filer vill du även göra dina data, lagrade i U-SQL-tabeller, tillgängliga för Spark.

Flytta data som lagras i Azure Data Lake Storage Gen1-filer

Data som lagras i filer kan flyttas på olika sätt:

Vi rekommenderar att du läser artikeln Uppgradera dina stordataanalyslösningar från Azure Data Lake Storage Gen1 till Azure Data Lake Storage Gen2

Flytta data som lagras i U-SQL-tabeller

U-SQL-tabeller tolkas inte av Spark. Om du har data lagrade i U-SQL-tabeller kör du ett U-SQL-jobb som extraherar tabelldata och sparar dem i ett format som Spark förstår. Det lämpligaste formatet är att skapa en uppsättning Parquet-filer efter Hive-metaarkivets mapplayout.

Utdata kan uppnås i U-SQL med den inbyggda Parquet-utdatan och med hjälp av dynamisk utdatapartitionering med filuppsättningar för att skapa partitionsmapparna. Bearbeta fler filer än någonsin och använd Parquet är ett exempel på hur du skapar sådana Spark-förbrukningsbara data.

Efter den här omvandlingen kopierar du data enligt beskrivningen i kapitlet Flytta data som lagras i Azure Data Lake Storage Gen1-filer.

Varningar

  • Datasemantik Vid kopiering av filer sker kopian på bytenivå. Samma data bör därför visas i Azure Data Lake Storage Gen2-kontot. Observera dock att Spark kan tolka vissa tecken på olika sätt. Den kan till exempel använda en annan standard för en radgränsare i en CSV-fil. Om du kopierar inskrivna data (från tabeller) kan Parquet och Spark dessutom ha olika precision och skalning för vissa av de inskrivna värdena (till exempel en flyttal) och kan behandla null-värden på olika sätt. U-SQL har till exempel C#-semantiken för null-värden, medan Spark har en trevärdeslogik för null-värden.

  • U-SQL-tabeller för dataorganisation (partitionering) ger partitionering på två nivåer. Den yttre nivån (PARTITIONED BY) är efter värde och mappar främst till Hive/Spark-partitioneringsschemat med hjälp av mapphierarkier. Du måste se till att null-värdena mappas till rätt mapp. Den inre nivån (DISTRIBUTED BY) i U-SQL erbjuder fyra distributionsscheman: resursallokering, intervall, hash och direkt hash. Hive/Spark-tabeller stöder endast värdepartitionering eller hashpartitionering med en annan hash-funktion än U-SQL. När du matar ut dina U-SQL-tabelldata kan du förmodligen bara mappa till värdepartitioneringen för Spark och kan behöva justera datalayouten ytterligare beroende på dina slutliga Spark-frågor.

Nästa steg