Kumpulan data terdistribusi yang dikelompokkan ke dalam kolom bernama.
DataFrame setara dengan tabel relasional di Spark SQL, dan dapat dibuat menggunakan berbagai fungsi di SparkSession.
Penting
DataFrame tidak boleh dibuat secara langsung menggunakan konstruktor.
Mendukung Spark Connect
Karakteristik
| Harta benda |
Deskripsi |
sparkSession |
Mengembalikan SparkSession yang membuat DataFrame ini. |
rdd |
Mengembalikan konten sebagai RDD Baris (mode Klasik saja). |
na |
Mengembalikan DataFrameNaFunctions untuk menangani nilai yang hilang. |
stat |
Mengembalikan DataFrameStatFunctions untuk fungsi statistik. |
write |
Antarmuka untuk menyimpan konten DataFrame non-streaming ke penyimpanan eksternal. |
writeStream |
Antarmuka untuk menyimpan konten DataFrame streaming ke penyimpanan eksternal. |
schema |
Mengembalikan skema DataFrame ini sebagai StructType. |
dtypes |
Mengembalikan semua nama kolom dan tipe datanya sebagai daftar. |
columns |
Mengambil nama semua kolom dalam DataFrame sebagai daftar. |
storageLevel |
Dapatkan tingkat penyimpanan DataFrame saat ini. |
isStreaming |
Mengembalikan True jika DataFrame ini berisi satu atau beberapa sumber yang terus mengembalikan data saat data tiba. |
executionInfo |
Mengembalikan objek ExecutionInfo setelah kueri dijalankan. |
plot |
Mengembalikan PySparkPlotAccessor untuk memplot fungsi. |
Metode
Tampilan dan inspeksi data
Tampilan sementara
Pemilihan dan proyeksi
Pengurutan dan pengurutan
Agregasi dan pengelompokan
| Metode |
Deskripsi |
groupBy(*cols) |
Mengelompokkan DataFrame menurut kolom yang ditentukan sehingga agregasi dapat dilakukan pada kolom tersebut. |
rollup(*cols) |
Buat rollup multi-dimensi untuk DataFrame saat ini menggunakan kolom yang ditentukan. |
cube(*cols) |
Buat kubus multi-dimensi untuk DataFrame saat ini menggunakan kolom yang ditentukan. |
groupingSets(groupingSets, *cols) |
Buat agregasi multi-dimensi untuk DataFrame saat ini menggunakan kumpulan pengelompokan yang ditentukan. |
agg(*exprs) |
Agregat pada seluruh DataFrame tanpa grup (singkatan untuk df.groupBy().agg()). |
observe(observation, *exprs) |
Tentukan metrik (bernama) untuk diamati pada DataFrame. |
Joins
Mengatur operasi
| Metode |
Deskripsi |
union(other) |
Mengembalikan DataFrame baru yang berisi penyatuan baris dalam ini dan DataFrame lainnya. |
unionByName(other, allowMissingColumns) |
Mengembalikan DataFrame baru yang berisi penyatuan baris dalam ini dan DataFrame lainnya. |
intersect(other) |
Mengembalikan DataFrame baru yang hanya berisi baris di DataFrame ini dan DataFrame lainnya. |
intersectAll(other) |
Mengembalikan DataFrame baru yang berisi baris di DataFrame ini dan DataFrame lain sambil mempertahankan duplikat. |
subtract(other) |
Mengembalikan DataFrame baru yang berisi baris dalam DataFrame ini tetapi tidak di DataFrame lain. |
exceptAll(other) |
Mengembalikan DataFrame baru yang berisi baris dalam DataFrame ini tetapi tidak di DataFrame lain sambil mempertahankan duplikat. |
Deduplication
| Metode |
Deskripsi |
distinct() |
Mengembalikan DataFrame baru yang berisi baris yang berbeda dalam DataFrame ini. |
dropDuplicates(subset) |
Mengembalikan DataFrame baru dengan baris duplikat dihapus, secara opsional hanya mempertimbangkan kolom tertentu. |
dropDuplicatesWithinWatermark(subset) |
Mengembalikan DataFrame baru dengan baris duplikat dihapus, secara opsional hanya mempertimbangkan kolom tertentu, dalam marka air. |
Pengambilan sampel dan pemisahan
Partitioning
Membentuk ulang
Penanganan data yang hilang
Fungsi statistik
Operasi skema
| Metode |
Deskripsi |
to(schema) |
Mengembalikan DataFrame baru di mana setiap baris direkonsiliasi agar sesuai dengan skema yang ditentukan. |
alias(alias) |
Mengembalikan DataFrame baru dengan set alias. |
Iteration
| Metode |
Deskripsi |
foreach(f) |
Menerapkan fungsi f ke semua Baris DataFrame ini. |
foreachPartition(f) |
Menerapkan fungsi f ke setiap partisi DataFrame ini. |
Penembolokan dan persistensi
Tabel berikut menjelaskan perilaku pada komputasi klasik.
| Metode |
Deskripsi |
cache() |
Mempertahankan DataFrame dengan tingkat penyimpanan default (MEMORY_AND_DISK_DESER). |
persist(storageLevel) |
Mengatur tingkat penyimpanan untuk mempertahankan konten DataFrame di seluruh operasi. |
unpersist(blocking) |
Menandai DataFrame sebagai tidak persisten, dan menghapus semua blok untuknya dari memori dan disk. |
Pada komputasi tanpa server, cache() dan persist() langsung compute DataFrame serta simpan hasilnya sebagai snapshot tetap untuk sesi Anda, dan persist() mengabaikan level penyimpanan.
unpersist() menandai snapshot sebagai siap untuk diambil kembali, dan DataFrame serta DataFrame yang diturunkan darinya tidak dapat digunakan lagi. Lihat Cache DataFrames pada komputasi serverless.
Titik Pemeriksaan
Operasi streaming
Petunjuk pengoptimalan
Batas dan offset
| Metode |
Deskripsi |
limit(num) |
Membatasi jumlah hasil ke angka yang ditentukan. |
offset(num) |
Mengembalikan DataFrame baru dengan melewati baris n pertama. |
Metode konversi
Penulisan data
| Metode |
Deskripsi |
writeTo(table) |
Buat penyusun konfigurasi tulis untuk sumber v2. |
mergeInto(table, condition) |
Menggabungkan serangkaian pembaruan, penyisipan, dan penghapusan berdasarkan tabel sumber ke dalam tabel target. |
Perbandingan DataFrame
| Metode |
Deskripsi |
sameSemantics(other) |
Mengembalikan True saat kueri logis merencanakan di dalam kedua DataFrames sama. |
semanticHash() |
Mengembalikan kode hash dari rencana kueri logis terhadap DataFrame ini. |
| Metode |
Deskripsi |
inputFiles() |
Mengembalikan rekam jepret upaya terbaik dari file yang menyusun DataFrame ini. |
Fitur SQL tingkat lanjut
| Metode |
Deskripsi |
isLocal() |
Mengembalikan True jika metode kumpulkan dan ambil dapat dijalankan secara lokal. |
asTable() |
Mengonversi DataFrame menjadi objek TableArg, yang dapat digunakan sebagai argumen tabel di TVF. |
scalar() |
Mengembalikan objek Kolom untuk Subkueri SCALAR yang berisi tepat satu baris dan satu kolom. |
exists() |
Mengembalikan objek Kolom untuk Subkueri EXISTS. |
Examples
Operasi DataFrame Dasar
# Create a DataFrame
people = spark.createDataFrame([
{"deptId": 1, "age": 40, "name": "Alice", "gender": "M", "salary": 50},
{"deptId": 1, "age": 50, "name": "Bob", "gender": "M", "salary": 100},
{"deptId": 2, "age": 60, "name": "Sue", "gender": "F", "salary": 150},
{"deptId": 3, "age": 20, "name": "Tom", "gender": "M", "salary": 200}
])
# Select columns
people.select("name", "age").show()
# Filter rows
people.filter(people.age > 30).show()
# Add a new column
people.withColumn("age_plus_10", people.age + 10).show()
Agregasi dan pengelompokan
# Group by and aggregate
people.groupBy("gender").agg({"salary": "avg", "age": "max"}).show()
# Multiple aggregations
from pyspark.sql import functions as F
people.groupBy("deptId").agg(
F.avg("salary").alias("avg_salary"),
F.max("age").alias("max_age")
).show()
Joins
# Create another DataFrame
department = spark.createDataFrame([
{"id": 1, "name": "PySpark"},
{"id": 2, "name": "ML"},
{"id": 3, "name": "Spark SQL"}
])
# Join DataFrames
people.join(department, people.deptId == department.id).show()
# Chained operations
result = people.filter(people.age > 30) \
.join(department, people.deptId == department.id) \
.groupBy(department.name, "gender") \
.agg({"salary": "avg", "age": "max"}) \
.sort("max(age)")
result.show()