Gunakan S3 Select dengan Spark untuk meningkatkan kinerja kueri - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan S3 Select dengan Spark untuk meningkatkan kinerja kueri

Dengan Amazon EMR rilis 5.17.0 dan yang lebih baru, Anda dapat menggunakan S3 Select dengan Spark di Amazon EMR. S3 Select memungkinkan aplikasi untuk mengambil hanya sebagian data dari objek. Untuk Amazon EMR, pekerjaan komputasi memfilter kumpulan data besar untuk diproses “didorong ke bawah” dari cluster ke Amazon S3, yang dapat meningkatkan kinerja di beberapa aplikasi dan mengurangi jumlah data yang ditransfer antara Amazon EMR dan Amazon S3.

S3 Select didukung dengan file CSV dan JSON menggunakan s3selectCSV dan s3selectJSON nilai untuk menentukan format data. Untuk informasi selengkapnya dan contoh tambahan, lihat Tentukan S3 Pilih dalam kode Anda.

Apakah S3 Select tepat untuk aplikasi saya?

Kami menyarankan Anda membuat tolok ukur aplikasi dengan dan tanpa S3 Select untuk melihat apakah cocok dengan aplikasi Anda.

Gunakan panduan berikut untuk menentukan apakah aplikasi Anda adalah kandidat untuk menggunakan S3 Pilih:

  • Permintaan Anda menyaring lebih dari setengah dari kumpulan data asli.

  • Koneksi jaringan Anda antara Amazon S3 dan cluster Amazon EMR memiliki kecepatan transfer yang baik dan bandwidth yang tersedia. Amazon S3 tidak memampatkan tanggapan HTTP, sehingga ukuran respon kemungkinan akan meningkatkan file input terkompresi.

Pertimbangan dan batasan

  • Enkripsi sisi server Amazon S3 dengan kunci enkripsi yang disediakan pelanggan (SSE-C) dan enkripsi di sisi klien tidak didukung.

  • Properti AllowQuotedRecordDelimiters tidak didukung. Jika properti ini ditentukan, kueri akan gagal.

  • Hanya file CSV dan JSON dalam format UTF-8 yang didukung. CSV multi-baris tidak didukung.

  • Hanya file yang tidak terkompresi atau gzip yang didukung.

  • Spark CSV dan JSON pilihan seperti nanValue, positiveInf, negativeInf, dan pilihan yang berkaitan dengan catatan korup (misalnya, failfast dan dropmalformed mode) tidak didukung.

  • Menggunakan koma (,) dalam desimal tidak didukung. Misalnya,10,000 tidak didukung dan 10000 didukung.

  • Komentar karakter di baris terakhir tidak didukung.

  • Baris kosong di akhir file tidak diproses.

  • Filter berikut tidak didorong ke Amazon S3:

    • Fungsi agregat seperti COUNT() dan SUM().

    • Filter yang CAST() atribut. Sebagai contoh, CAST(stringColumn as INT) = 1.

    • Filter dengan atribut yang merupakan objek atau kompleks. Sebagai contoh, intArray[1] = 1, objectColumn.objectNumber = 1.

    • Filter yang nilainya bukan nilai literal. Sebagai contoh, intColumn1 = intColumn2

    • Hanya S3 Pilih tipe data yang didukung didukung dengan keterbatasan yang didokumentasikan.

Tentukan S3 Pilih dalam kode Anda

Contoh berikut menunjukkan cara menentukan S3 Select untuk CSV menggunakan Scala, SQL, R, dan. PySpark Anda dapat menggunakan S3 Pilih untuk JSON dengan cara yang sama. Untuk daftar pilihan, nilai default, dan keterbatasan, lihat Opsi.

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

Opsi

Pilihan berikut tersedia saat menggunakan s3selectCSV dan s3selectJSON. Jika tidak ditentukan, nilai default digunakan.

Pilihan dengan S3selectCSV

Opsi Default Penggunaan

compression

"none"

Menunjukkan apakah kompresi digunakan. "gzip" adalah satu-satunya pengaturan yang didukung selain "none".

delimiter

","

Menentukan bidang pembatas.

quote

'\"'

Menentukan karakter kutipan. Menentukan string kosong tidak didukung dan menghasilkan kesalahan XML yang salah.

escape

'\\'

Menentukan karakter escape.

header

"false"

"false" menetapkan bahwa tidak ada header. "true" menetapkan bahwa header adalah di baris pertama. Hanya header di baris pertama yang didukung, dan baris kosong sebelum header tidak didukung.

komentar

"#"

Menentukan karakter komentar. Indikator komentar tidak dapat dinonaktifkan. Dengan kata lain, nilai \u0000 tidak didukung.

nullValue

""

Pilihan dengan S3selectJSON

Opsi Default Penggunaan

compression

"none"

Menunjukkan apakah kompresi digunakan. "gzip" adalah satu-satunya pengaturan yang didukung selain "none".

multiline

"salah"

"false" menetapkan bahwa JSON di S3 Pilih LINES format, yang berarti bahwa setiap baris dalam data input berisi objek JSON tunggal. "true" menetapkan bahwa JSON di S3 Pilih DOCUMENT Format, yang berarti bahwa objek JSON dapat span beberapa baris dalam input data.