Grundlegendes zu den Unterschieden zwischen U-SQL- und Spark-Datenformaten

Wenn Sie Azure Databricks oder Azure HDInsight Spark verwenden möchten, empfiehlt es sich, Ihre Daten von Azure Data Lake Storage Gen1 zu Azure Data Lake Storage Gen2 zu migrieren.

Zusätzlich zum Verschieben der Dateien sollten Sie die in U-SQL-Tabellen gespeicherten Daten für Spark verfügbar machen.

Verschieben von in Azure Data Lake Storage Gen1-Dateien gespeicherten Dateien

In Dateien gespeicherte Daten können auf verschiedene Weise verschoben werden:

Es empfiehlt sich, den Artikel Upgrade von Big Data-Analyselösungen von Azure Data Lake Storage Gen1 auf Azure Data Lake Storage Gen2 zu lesen.

Verschieben von in U-SQL-Tabellen gespeicherten Daten

U-SQL-Tabellen können in Spark nicht interpretiert werden. Wenn Sie Daten in U-SQL-Tabellen gespeichert haben, führen Sie einen U-SQL-Auftrag aus, mit dem die Tabellendaten extrahiert und in einem Format gespeichert werden, das in Spark erkannt wird. Am besten eignet sich das Erstellen einer Gruppe von Parquet-Dateien entsprechend dem Ordnerlayout des Hive-Metastores.

Die Ausgabe kann in U-SQL mit dem integrierten Parquet-Outputter und mithilfe der dynamischen Ausgabepartitionierung mit Dateigruppen zum Erstellen der Partitionsordner erreicht werden. Unter Process more files than ever and use Parquet (Verarbeiten größerer Datenmengen durch Verwendung von Parquet) finden Sie ein Beispiel zum Erstellen dieser in Spark nutzbaren Daten.

Nach dieser Transformation kopieren Sie die Daten entsprechend der Beschreibung im Abschnitt Verschieben von in Azure Data Lake Storage Gen1-Dateien gespeicherten Dateien.

Vorbehalte

  • Datensemantik: Beim Kopieren von Dateien erfolgt der Kopiervorgang auf Byteebene. Daher sollten die gleichen Daten im Azure Data Lake Storage Gen2-Konto angezeigt werden. Beachten Sie jedoch, dass einige Zeichen in Spark unterschiedlich interpretiert werden können. Beispielsweise kann in einer CSV-Datei ein anderer Standardwert für ein Zeilentrennzeichen verwendet werden. Wenn Sie typisierte Daten (aus Tabellen) kopieren, können in Parquet und Spark außerdem möglicherweise eine unterschiedliche Genauigkeit und Anzahl der Dezimalstellen für einige der typisierten Werte festgelegt sein (z. B. ein Gleitkommawert) und NULL-Werte unterschiedlich verarbeitet werden. In U-SQL wird z. B. die C#-Semantik für NULL-Werte verwendet, in Spark dagegen eine dreiwertige Logik.

  • Datenorganisation (Partitionierung): U-SQL-Tabellen umfassen eine zweistufige Partitionierung. Die äußere Ebene (PARTITIONED BY) ist nach Wert definiert und wird größtenteils dem Hive/Spark-Partitionsschema zugeordnet. Sie müssen sicherstellen, dass die NULL-Werte dem richtigen Ordner zugeordnet werden. Die innere Ebene (DISTRIBUTED BY) in U-SQL bietet 4 Verteilungsschemas: Roundrobin, Bereich, Hash und direkter Hash. Hive/Spark-Tabellen unterstützen nur die Wert- oder die Hashpartitionierung, wobei eine andere Hashfunktion als bei U-SQL verwendet wird. Bei der Ausgabe der U-SQL-Tabellendaten können Sie wahrscheinlich nur die Wertpartitionierung für Spark zuordnen und müssen abhängig von den endgültigen Spark-Abfragen möglicherweise eine weitere Optimierung des Datenlayouts vornehmen.

Nächste Schritte