S3 Select mit Spark zur Verbesserung der Leistung bei Abfragen verwenden - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

S3 Select mit Spark zur Verbesserung der Leistung bei Abfragen verwenden

Wichtig

Amazon S3 Select ist für Neukunden nicht mehr verfügbar. Bestandskunden von Amazon S3 Select können die Funktion weiterhin wie gewohnt nutzen. Weitere Informationen

Mit EMR Amazon-Version 5.17.0 und höher können Sie S3 Select mit Spark auf Amazon verwenden. EMR S3 Select ermöglicht es Anwendungen, nur eine Teilmenge von Daten aus einem Objekt abzurufen. Für Amazon EMR wird die Rechenarbeit beim Filtern großer Datenmengen für die Verarbeitung vom Cluster auf Amazon S3 „heruntergeschoben“, wodurch die Leistung einiger Anwendungen verbessert und die zwischen Amazon EMR und Amazon S3 übertragene Datenmenge reduziert werden kann.

S3 Select wird zusammen mit CSV JSON Dateien unterstützt, die s3selectJSON Werte s3selectCSV und zur Angabe des Datenformats verwenden. Weitere Informationen und Beispiele finden Sie unter S3 Select in Ihrem Code angeben.

Ist S3 Select das Richtige für meine Anwendung?

Wir empfehlen, dass Sie Benchmark-Tests für Ihre Anwendungen im Vergleich mit und ohne S3 Select durchführen, um zu sehen, ob es für Ihre Anwendung geeignet sein könnte.

Verwenden Sie die folgenden Richtlinien, um zu bestimmen, ob Ihre Anwendung ein Kandidat für die Verwendung von S3 ist:

  • Ihre Abfrage filtert mehr als die Hälfte des ursprünglichen Datensatzes.

  • Ihre Netzwerkverbindung zwischen Amazon S3 und dem EMR Amazon-Cluster hat eine gute Übertragungsgeschwindigkeit und verfügbare Bandbreite. Amazon S3 komprimiert keine HTTP Antworten, sodass die Antwortgröße bei komprimierten Eingabedateien wahrscheinlich zunimmt.

Überlegungen und Einschränkungen

  • Serverseitige Amazon S3 S3-Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln (SSE-C) und clientseitige Verschlüsselung werden nicht unterstützt.

  • Die Eigenschaft AllowQuotedRecordDelimiters wird nicht unterstützt. Wenn diese Eigenschaft angegeben ist, schlägt die Abfrage fehl.

  • Es werden nur JSON Dateien im CSV -8-Format unterstütztUTF. Mehrzeilige CSVs werden nicht unterstützt.

  • Es werden nur unkomprimierte oder gzip-Dateien unterstützt.

  • Spark CSV und JSON Optionen wienanValue,, und Optionen positiveInfnegativeInf, die sich auf beschädigte Datensätze beziehen (z. B. Failfast- und Dropmalformed-Modus), werden nicht unterstützt.

  • Die Verwendung von Kommas als Tausender-Trennzeichen wird bei Dezimalzahlen nicht unterstützt. Beispielweise ist 10,000 ungültig, 10000 wird unterstützt.

  • Kommentarzeichen auf der letzten Zeile werden nicht unterstützt.

  • Leere Zeilen am Ende einer Datei werden nicht verarbeitet.

  • Die folgenden Filter werden nicht an Amazon S3 ausgelagert:

    • Aggregatfunktionen wie COUNT() und SUM().

    • Filter, die ein Attribut über einen CAST()-Aufruf konvertieren. Beispiel, CAST(stringColumn as INT) = 1.

    • Filter mit einem Attribut, das ein Objekt ist oder einem zusammengesetzten Attribut. Beispiel, intArray[1] = 1, objectColumn.objectNumber = 1.

    • Filter, deren Wert ist nicht literal ist. Beispiel: intColumn1 = intColumn2

    • Es werden nur die von S3 Select unterstützten Datentypen unterstützt, und es gelten die dokumentierten Einschränkungen.

S3 Select in Ihrem Code angeben

Die folgenden Beispiele zeigen, wie S3 Select für die CSV Verwendung von ScalaSQL, R und PySpark angegeben wird. Sie können S3 Select for JSON auf die gleiche Weise verwenden. Eine Liste der Optionen, der Standardwerte und der Einschränkungen finden Sie unter Optionen.

PySpark
spark .read .format("s3selectCSV") // "s3selectJson" for Json .schema(...) // optional, but recommended .options(...) // optional .load("s3://path/to/my/datafiles")
R
read.df("s3://path/to/my/datafiles", "s3selectCSV", schema, header = "true", delimiter = "\t")
Scala
spark .read .format("s3selectCSV") // "s3selectJson" for Json .schema(...) // optional, but recommended .options(...) // optional. Examples: // .options(Map("quote" -> "\'", "header" -> "true")) or // .option("quote", "\'").option("header", "true") .load("s3://path/to/my/datafiles")
SQL
CREATE TEMPORARY VIEW MyView (number INT, name STRING) USING s3selectCSV OPTIONS (path "s3://path/to/my/datafiles", header "true", delimiter "\t")

Optionen

Die folgenden Optionen sind verfügbar, wenn s3selectCSV und s3selectJSON verwendet wird. Wenn nichts angegeben wird, werden die Standardwerte verwendet.

Optionen mit S3Select CSV

Option Standard Verwendung

compression

"none"

Gibt an, ob Komprimierung verwendet wird. "gzip" wird neben "none" als einzige Einstellung unterstützt.

delimiter

","

Gibt den Feldbegrenzer an.

quote

'\"'

Gibt das Zeichen an, das als Anführungszeichen verwendet wird. Die Angabe einer leeren Zeichenfolge wird nicht unterstützt und führt zu einem XML fehlerhaften Fehler.

escape

'\\'

Gibt das Zeichen an, das als Escape-Zeichen verwendet wird.

header

"false"

"false" gibt an, dass es keine Kopfzeile gibt. "true" gibt an, dass die erste Zeile die Kopfzeile ist. Es werden ausschließlich Kopfzeilen in der ersten Zeile unterstützt, und leere Zeilen vor der Kopfzeile werden nicht unterstützt.

Kommentar

"#"

Gibt das Zeichen an, das als Kommentarzeichen verwendet wird. Der Kommentarindikator kann nicht deaktiviert werden. Dies bedeutet, dass der Wert \u0000 nicht unterstützt wird.

nullValue

""

Optionen mit S3Select JSON

Option Standard Verwendung

compression

"none"

Gibt an, ob Komprimierung verwendet wird. "gzip" wird neben "none" als einzige Einstellung unterstützt.

multiline

„false“

"false"gibt an, dass JSON das das LINES Format S3 Select hat, was bedeutet, dass jede Zeile in den Eingabedaten ein einzelnes JSON Objekt enthält. "true"gibt an, dass JSON es sich um das DOCUMENT S3-Select-Format handelt, was bedeutet, dass sich ein JSON Objekt in den Eingabedaten über mehrere Zeilen erstrecken kann.