Topik ini menjelaskan cara menggunakan pustaka segmentasi open-source Jieba dalam node PyODPS DataWorks untuk memisahkan teks bahasa Tiongkok yang disimpan dalam tabel MaxCompute, serta cara memperluas kamus bawaan dengan istilah kustom menggunakan fungsi closure.
Setelah menyelesaikan topik ini, Anda akan dapat:
-
Mengunggah paket Python pihak ketiga sebagai resource arsip MaxCompute.
-
Merujuk paket tersebut dalam pemanggilan
map()PyODPS. -
Memuat resource file MaxCompute di dalam user-defined function (UDF) melalui fungsi closure.
-
Memverifikasi hasil segmentasi pada tab Runtime Log dan melalui kueri ad hoc.
Kode contoh dalam topik ini hanya untuk referensi. Jangan menggunakannya secara langsung di lingkungan produksi.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Memiliki ruang kerja DataWorks dengan mesin komputasi MaxCompute yang terkait. Lihat Buat ruang kerja.
-
Memahami dasar-dasar Python dan node PyODPS 3. Lihat Kembangkan tugas PyODPS 3.
Cara kerja node PyODPS dengan paket pihak ketiga
Node PyODPS DataWorks memungkinkan Anda menjalankan kode Python terhadap MaxCompute menggunakan MaxCompute SDK for Python (PyODPS). Tersedia dua versi node—PyODPS 2 dan PyODPS 3. Gunakan PyODPS 3.
Untuk menggunakan pustaka Python pihak ketiga dalam UDF PyODPS, unggah file zip pustaka tersebut sebagai resource arsip MaxCompute dan rujuk dalam parameter libraries dari persist(). MaxCompute mendistribusikan pustaka tersebut ke setiap mapper saat inisialisasi pekerjaan, sehingga tersedia ketika UDF dijalankan.
Persiapan: Unduh paket Jieba
Unduh paket Jieba (jieba-master.zip) dari GitHub.
Latihan 1: Segmentasi teks bahasa Tiongkok dengan kamus Jieba bawaan
Langkah 1: Buat alur kerja
Buat alur kerja di DataWorks. Lihat Buat alur kerja.
Langkah 2: Unggah paket Jieba sebagai resource arsip
-
Di DataStudio, klik kanan nama alur kerja dan pilih Create Resource > MaxCompute > Archive.
-
Pada kotak dialog Create Resource, konfigurasikan parameter berikut dan klik Create.
Parameter Description File Klik Upload dan pilih file jieba-master.zipyang diunduh dari GitHub.Name Nama resource. Atur menjadi jieba-master.zip. Nama ini dapat berbeda dari nama file yang diunggah, tetapi harus mengikuti konvensi penamaan DataWorks.
-
Klik ikon
di bilah alat untuk melakukan commit resource ke lingkungan pengembangan.
Langkah 3: Buat tabel sumber dan hasil
Buat dua tabel MaxCompute: jieba_test untuk menyimpan data masukan, dan jieba_result untuk menyimpan output segmentasi.
Untuk membuat setiap tabel, klik kanan nama alur kerja dan pilih Create Table > MaxCompute > Table. Pada kotak dialog Create Table, konfigurasikan parameter dan klik Create. Kemudian jalankan pernyataan DDL berikut untuk menentukan skema tabel.
`jieba_test` — menyimpan teks bahasa Tiongkok yang akan disegmentasi:
CREATE TABLE jieba_test (
`chinese` string,
`content` string
);
`jieba_result` — menyimpan output segmentasi:
CREATE TABLE jieba_result (
`chinese` string
);
Setelah membuat tabel, lakukan commit ke lingkungan pengembangan.
Langkah 4: Impor data uji
-
Unduh jieba_test.csv ke mesin lokal Anda.
-
Klik ikon
di panel Scheduled Workflow pada halaman DataStudio. -
Pada kotak dialog Data Import Wizard, masukkan
jieba_testdi kolom nama tabel, pilih tabel tersebut, lalu klik Next. -
Klik Browse, unggah
jieba_test.csvdari mesin lokal Anda, lalu klik Next. -
Pilih By Name dan klik Import Data.
Langkah 5: Buat node PyODPS 3
-
Klik kanan nama alur kerja dan pilih Create Node > MaxCompute > PyODPS 3.
-
Pada kotak dialog Create Node, atur Name menjadi
word_split(atau nama lain yang sesuai) dan klik Confirm.
Langkah 6: Jalankan kode segmentasi
Tempel kode berikut ke dalam node PyODPS 3 dan jalankan. Kode ini membaca kolom chinese dari jieba_test, melakukan segmentasi setiap nilai menggunakan Jieba, dan menulis hasilnya ke jieba_result.
def test(input_var):
import jieba
result = jieba.cut(input_var, cut_all=False)
return "/ ".join(result)
hints = {
'odps.isolation.session.enable': True,
# Tingkatkan split.size untuk meningkatkan paralelisme mapper. Lihat: Flag parameters.
'odps.stage.mapper.split.size': 64,
}
libraries = ['jieba-master.zip'] # Distribusikan arsip Jieba ke setiap mapper.
src_df = o.get_table('jieba_test').to_df()
result_df = src_df.chinese.map(test).persist('jieba_result', hints=hints, libraries=libraries)
print(result_df.head(10)) # Cetak 10 baris pertama; hasil lengkap ada di jieba_result.
odps.stage.mapper.split.size dapat digunakan untuk meningkatkan paralelisme eksekusi. Untuk semua parameter flag yang tersedia, lihat Flag parameters.
Langkah 7: Lihat hasilnya
-
Runtime log: Periksa tab Runtime Log di bagian bawah halaman untuk output dari
print(result_df.head(10)). -
Tabel lengkap: Di panel navigasi sebelah kiri DataStudio, klik Ad Hoc Query, buat node kueri ad hoc, lalu jalankan:
SELECT * FROM jieba_result;
Latihan 2: Segmentasi teks bahasa Tiongkok dengan kamus kustom
Kamus bawaan Jieba mungkin tidak mengenali istilah spesifik domain. Dengan memuat kamus kustom, Anda dapat memastikan istilah tersebut diperlakukan sebagai satu token, bukan dipisah menjadi karakter-karakter.
map() PyODPS meneruskan data baris demi baris ke dalam UDF. Untuk memuat kamus hanya sekali—saat inisialisasi mapper, bukan untuk setiap baris—gunakan fungsi closure atau fungsi dari kelas callable. Fungsi luar memuat kamus saat mapper dimulai dan mengembalikan fungsi dalam yang menangani setiap baris. Pola ini menghindari I/O berulang untuk setiap baris. Untuk UDF yang lebih kompleks, lihat Buat dan gunakan UDF MaxCompute.
Langkah 1: Unggah kamus kustom sebagai resource file
-
Klik kanan nama alur kerja dan pilih Create Resource > MaxCompute > File.
-
Pada kotak dialog Create Resource, atur Name menjadi
key_words.txtdan klik Create. -
Pada tab konfigurasi resource
key_words.txt, masukkan istilah kustom Anda (satu per baris), lalu simpan dan lakukan commit resource tersebut. Contohnya:增量备份 安全合规
Langkah 2: Buat tabel hasil
Sebelum menjalankan kode, buat tabel bernama jieba_result2 menggunakan DDL yang sama seperti jieba_result:
CREATE TABLE jieba_result2 (
`chinese` string
);
Lakukan commit tabel ke lingkungan pengembangan.
Langkah 3: Jalankan kode segmentasi dengan kamus kustom
Tempel kode berikut ke dalam node PyODPS 3 yang sama (atau node baru) dan jalankan.
def test(resources):
import jieba
fileobj = resources[0]
jieba.load_userdict(fileobj) # Muat kamus kustom sekali saat inisialisasi mapper.
def h(input_var): # Fungsi dalam: dipanggil untuk setiap baris dalam operasi map.
result = jieba.cut(input_var, cut_all=False)
return "/ ".join(result)
return h # Kembalikan fungsi dalam sebagai penanganan UDF.
hints = {
'odps.isolation.session.enable': True,
'odps.stage.mapper.split.size': 64,
}
libraries = ['jieba-master.zip']
src_df = o.get_table('jieba_test').to_df()
file_object = o.get_resource('key_words.txt') # Rujuk resource file MaxCompute.
mapped_df = src_df.chinese.map(test, resources=[file_object]) # Teruskan resource ke closure.
result_df = mapped_df.persist('jieba_result2', hints=hints, libraries=libraries)
print(result_df.head(10))
o.get_resource()mengambil resource file dari MaxCompute dan meneruskannya ke fungsi luartest()melalui parameterresources. Resource dimuat sekali per mapper, bukan sekali per baris. Lihat Flag parameters untuk opsi hint.
Langkah 4: Lihat hasilnya
-
Runtime log: Periksa tab Runtime Log untuk 10 baris pertama output.
-
Tabel lengkap: Jalankan kueri ad hoc berikut:
SELECT * FROM jieba_result2;
Langkah 5: Bandingkan output
Jalankan kueri berikut berdampingan untuk melihat bagaimana kamus kustom mengubah segmentasi istilah spesifik domain seperti 增量备份 dan 安全合规.
SELECT * FROM jieba_result; -- Hasil dengan kamus bawaan
SELECT * FROM jieba_result2; -- Hasil dengan kamus kustom
Istilah yang tercantum dalam key_words.txt muncul sebagai satu token di jieba_result2, bukan dipisah oleh kamus bawaan.
Langkah selanjutnya
-
Gunakan PyODPS di DataWorks — panduan lengkap tentang node PyODPS, termasuk manajemen resource, penjadwalan, dan pola UDF lanjutan.
-
Buat dan gunakan UDF MaxCompute — untuk UDF yang lebih kompleks, termasuk pola kelas callable.
-
Flag parameters — semua parameter hint yang tersedia untuk menyetel pekerjaan MaxCompute.