Verwenden von S3 Select mit Spark zur Verbesserung der Leistung bei Abfragen - 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.

Verwenden von S3 Select mit Spark zur Verbesserung der Leistung bei Abfragen

Mit Amazon EMR Version 5.17.0 und höher können Sie S3 Select mit Spark auf Amazon EMR. verwenden. S3 Select ermöglicht es Anwendungen, nur eine Teilmenge von Daten aus einem Objekt abzurufen. Bei Amazon EMR wird die numerische Arbeit zur Filterung großer Datensätze von dem Cluster an Amazon S3 ausgelagert. Dies kann die Leistung in einigen Anwendungen verbessern und reduziert die Menge der zwischen Amazon EMR und Amazon S3. übertragenen Daten.

S3 Select unterstützt CSV und JSON-Dateien, das Datenformat wird unter Verwendung von s3selectCSV und s3selectJSON angegeben. Weitere Informationen und Beispiele finden Sie unter Angeben von S3 Select in Ihrem Code.

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 Amazon EMR-Cluster verfügt über eine gute Übertragungsgeschwindigkeit und verfügbare Bandbreite. Amazon S3 komprimiert keine HTTP-Antworten, so dass die Antwortgröße wahrscheinlich für komprimierte Eingabedateien zunimmt.

Überlegungen und Einschränkungen

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

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

  • Nur CSV- und JSON-Dateien im UTF-8-Format werden unterstützt. Mehrzeilige CSVs werden nicht unterstützt.

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

  • Die Optionen für die Datenformate CSV und JSON in Spark (z. B. nanValue, positiveInf, negativeInf) sowie Optionen zum Umgang mit beschädigten Datensätzen (z. B. der failfast-Modus zur frühen Terminierung und der dropmalformed-Modus zum Überspringen von Datensätzen im falschen Format) 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 ausgelagert:Amazon S3:

    • 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

    • Nur von S3 Select unterstützte Datentypen werden mit den dokumentierten Einschränkungen unterstützt.

Angeben von S3 Select in Ihrem Code

Die folgenden Beispiele zeigen, wie Sie S3 Select für CSV mit Scala, SQL, R und PySpark angeben. Sie können S3 Select für JSON auf die gleiche Weise verwenden. Eine Liste der Optionen, der Standardwerte und der Einschränkungen finden Sie unter Options.

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")

Options

Die folgenden Optionen sind verfügbar, wenn Sie s3selectCSV und s3selectJSON verwenden. Wenn keine Standardwerte angegeben werden, werden sie verwendet.

Optionen mit S3selectCSV

Option Standard Verwendung

compression

"none"

Gibt an, ob Komprimierung verwendet wird. "gzip" ist die einzige unterstützte Einstellung außer "none".

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-Fehler aufgrund fehlerhaftem Format.

escape

'\\'

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

header

"false"

"false" gibt an, dass es keinen Header gibt. "true" gibt an, dass sich ein Header in der ersten Zeile befindet. 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 S3selectJSON

Option Standard Verwendung

compression

"none"

Gibt an, ob Komprimierung verwendet wird. "gzip" ist die einzige unterstützte Einstellung außer "none".

multiline

„false“

"false" gibt an, dass das JSON-Objekt im S3 Select-Format LINES vorliegt. Das bedeutet, dass jede Zeile in den Eingabedaten ein einzelnes JSON-Objekt enthält. "true" gibt an, dass das JSON-Objekt im S3 Select-Format DOCUMENT vorliegt. Das bedeutet, dass ein JSON-Objekt mehrere Zeilen in den Eingabedaten umfassen kann.