Förstå skillnader mellan data formaten U-SQL och Spark

Om du vill använda antingen Azure Databricks eller Azure HDInsight Sparkrekommenderar 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 också 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 Big data Analytics-lö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 kan inte tolkas av Spark. Om du har data som lagras i U-SQL-tabeller, kör du ett U-SQL-jobb som extraherar tabell data och sparar dem i ett format som Spark förstår. Det lämpligaste formatet är att skapa en uppsättning Parquet-filer som följer Hive-metaarkiv Folder-layouten.

Utdata kan uppnås i U-SQL med den inbyggda Parquet-utmatningen och med hjälp av dynamisk utdata partitionering med fil uppsättningar för att skapa diskpartitioner. Att bearbeta fler filer än någonsin och använda Parquet innehåller ett exempel på hur du skapar sådana Spark-förbruknings bara data.

Efter den här omvandlingen kopierar du data som beskrivs i kapitlet Flytta data lagrade i Azure Data Lake Storage gen1 filer.

Varningar

  • Datasemantiken vid kopiering av filer görs kopian på byte-nivån. Samma data ska visas i Azure Data Lake Storage Gen2 -kontot. Dock kan Spark tolka vissa tecken på olika sätt. Den kan till exempel använda en annan standard för en rad avgränsare i en CSV-fil. Om du däremot kopierar inskrivna data (från tabeller) kan Parquet och Spark ha olika precision och skala för några av de angivna värdena (till exempel ett float) och kan behandla null-värden på olika sätt. U-SQL har till exempel C#-semantik för null-värden, medan Spark har en tre-värdes logik för null-värden.

  • Data organisation (partitionering) U-SQL-tabeller tillhandahåller partitionering på två nivåer. Den yttre nivån ( PARTITIONED BY ) är av värde och mappar mest till Hive/Spark-partitionerings schema med hjälp av mapphierarkier. Du måste se till att null-värden mappas till rätt mapp. Den inre nivån ( DISTRIBUTED BY ) i U-SQL erbjuder 4 distributions scheman: resursallokering, intervall, hash och direkt hash. Hive/Spark-tabeller stöder bara värde partitionering eller hash-partitionering, med en annan hash-funktion än U-SQL. När du matar ut dina U-SQL-tabell data kommer du förmodligen bara att kunna mappa till värdet partitionering för Spark och kan behöva göra ytterligare justeringar av datalayouten beroende på dina slutliga Spark-frågor.

Nästa steg