Artikel ini menggunakan klaster Serverless Spark E-MapReduce sebagai contoh untuk menjelaskan cara membaca file Parquet yang dihasilkan oleh Spark SQL di MaxCompute dengan metode Schemaless Query, lalu mengirimkan hasil komputasi kembali ke OSS melalui perintah UNLOAD setelah proses selesai.
Prasyarat
-
Telah membuat workspace EMR Serverless Spark.
Artikel ini menggunakan wilayah Tiongkok Timur 1 (Hangzhou) sebagai contoh. Diasumsikan nama workspace yang dibuat adalah
schemaless_testdan nama bucket OSS-nya adalahoss-mc-test. -
Telah Create a MaxCompute project.
Langkah 1: Menghasilkan data Parquet berbasis Serverless Spark
-
Login ke Konsol E-MapReduce. Di panel navigasi kiri, pilih .
-
Pada halaman Spark, klik nama workspace yang telah dibuat. Setelah masuk ke halaman EMR Serverless Spark, klik Data Development di panel kiri.
-
Buat tugas Spark SQL baru, masukkan perintah SQL berikut untuk membuat tabel dalam format Parquet dan menulis data, lalu klik 运行.
PentingSebelum menjalankan perintah berikut, pastikan direktori data dan database yang dipilih di pojok kanan atas halaman sudah terkait dengan path bucket OSS yang telah dibuat.
CREATE TABLE example_table01 ( id INT, name STRING, age INT ) USING PARQUET; INSERT INTO example_table01 VALUES (1, 'Alice', 30), (2, 'Bob', 25), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 32), (6, 'Frank', 28), (7, 'Grace', 33), (8, 'Hannah', 29), (9, 'Ian', 36), (10, 'Julia', 31); SELECT * FROM example_table01; -
Setelah berhasil dijalankan, Anda dapat melihat tabel
example_table01yang telah dihasilkan pada halaman 元数据管理 di Konsol DLF Data Lake Formation. Pada halaman Manajemen Metadata, pilih tab Data Table untuk melihat tabel example_table01 yang telah dibuat dengan format Parquet.Anda juga dapat melihat file Parquet yang dihasilkan di direktori bucket OSS. Di direktori
example_table01/di OSS, Anda akan melihat file penanda_SUCCESSdan dua file data.snappy.parquet, yang menunjukkan bahwa data Parquet telah berhasil ditulis.
Langkah 2: Membaca data melalui Schemaless Query
Untuk membaca file Parquet di MaxCompute, lihat detailnya di Feature: Schemaless Query.
Karena saat menulis tabel Parquet akan dihasilkan file bernama _SUCCESS, Anda perlu menggunakan parameter file_pattern_blacklist untuk menambahkan file _SUCCESS ke dalam blacklist agar file tersebut tidak dibaca. Jika parameter ini tidak ditambahkan, sistem akan mengembalikan error.
SELECT * FROM
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/'
(
'file_format'='parquet',
'file_pattern_blacklist'='.*_SUCCESS.*'
);
Hasil yang dikembalikan sebagai berikut:
+------------+------------+------------+
| id | name | age |
+------------+------------+------------+
| 1 | Alice | 30 |
| 2 | Bob | 25 |
| 3 | Charlie | 35 |
| 4 | David | 40 |
| 5 | Eve | 32 |
| 6 | Frank | 28 |
| 7 | Grace | 33 |
| 8 | Hannah | 29 |
| 9 | Ian | 36 |
| 10 | Julia | 31 |
+------------+------------+------------+
Langkah 3: Melakukan komputasi menggunakan SQL
Menanyakan jumlah total orang yang berusia lebih dari 30 tahun.
SELECT COUNT(*) FROM
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/'
(
'file_format'='parquet',
'file_pattern_blacklist'='.*_SUCCESS.*'
)
WHERE age>30;
Hasil yang dikembalikan sebagai berikut:
+------------+
| _c0 |
+------------+
| 6 |
+------------+
Langkah 4: Mengirimkan hasil komputasi kembali ke OSS melalui perintah UNLOAD
MaxCompute mendukung ekspor data dari proyek MaxCompute ke penyimpanan eksternal OSS agar dapat digunakan oleh engine komputasi lainnya. Untuk penggunaan spesifik, lihat UNLOAD.
-
Jalankan perintah berikut di MaxCompute untuk mengekspor hasil komputasi dari Langkah 3: Melakukan komputasi menggunakan SQL ke OSS dalam format Parquet.
Sebelum menjalankan kode berikut, Anda harus membuat direktori
unload_schemalessdi dalam bucket OSSoss-mc-test.UNLOAD FROM ( SELECT COUNT(*) FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/' ('file_format'='parquet','file_pattern_blacklist'='.*_SUCCESS.*') WHERE age>30 ) INTO LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/unload_schemaless/' ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' WITH SERDEPROPERTIES ('odps.properties.rolearn'='acs:ram::<uid>:role/AliyunODPSDefaultRole') STORED AS PARQUET PROPERTIES('mcfed.parquet.compression'='SNAPPY') ; -
Login ke Konsol OSS dan periksa apakah proses UNLOAD berhasil.