Bekerja di pyspark kita sering perlu membuat DataFrame langsung dari daftar dan objek python. Skenario termasuk, namun tidak terbatas pada. perlengkapan untuk pengujian unit Spark, membuat DataFrame dari data yang dimuat dari sumber data khusus, mengonversi hasil dari perhitungan python (e. g. Panda, scikitlearn, dll. ) ke Spark DataFrame. user_df = spark.createDataFrame(data)
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)6, seperti yang dijelaskan dalam Buat Spark DataFrame Dari Objek Python di pyspark, menyediakan metode yang nyaman user_df = spark.createDataFrame(data)
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)7 untuk membuat Spark DataFrames. Metode ini menerima parameter berikut
- data — RDD dari segala jenis representasi data SQL, atau daftar, atau panda. Bingkai Data
- schema — skema DataFrame. Menerima Tipe Data, string tipe data, daftar string atau Tidak Ada
- samplingRatio — rasio pengambilan sampel dari baris yang digunakan saat menyimpulkan skema
- verifikasiSchema — jika disetel ke True, setiap baris diverifikasi berdasarkan skema
Kami dapat menentukan skema menggunakan pendekatan yang berbeda
- Ketika skema Tidak ada, skema (nama kolom dan tipe kolom) disimpulkan dari data, yang seharusnya berupa RDD atau daftar Baris, bernamatuple, atau dict
- Saat skema adalah daftar nama kolom, tipe setiap kolom disimpulkan dari data
- Ketika skema adalah DataType atau string tipe data, itu harus cocok dengan data sebenarnya
Mari kita lihat bagaimana metode user_df = spark.createDataFrame(data)
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)_7 bekerja dalam beberapa skenario. Kami akan menggunakan daftar python sebagai parameter data. RDD dan Pandas DataFrame yang akan kita tinggalkan nanti
Saat skema tidak ditentukan, Spark mencoba menyimpulkan skema dari data aktual, menggunakan rasio pengambilan sampel yang disediakan. Nama kolom juga disimpulkan dari data
Melewati daftar user_df = spark.createDataFrame(data)user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)9 objek sebagai user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+0
Pertama kita akan membuat namedtuple user_row dan kemudian kita akan membuat daftar objek user_row
user_row = namedtuple('user_row', 'dob age is_fan'.split())
data = [
user_row('1990-05-03', 29, True),
user_row('1994-09-23', 25, False)
]
Sekarang kita dapat membuat bingkai data dan memeriksa skema yang disimpulkan
user_df = spark.createDataFrame(data)user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)
Kami juga dapat memeriksa data dari DataFrame
user_df.show()+----------+---+------+| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+_
Masalah dengan metode ini adalah kami tidak memiliki kendali penuh atas skema yang disimpulkan. Terkadang inferensi skema juga gagal
Melewati daftar user_df.show()+----------+---+------+| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+1 objek sebagai user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+0data_list = [
('1990-05-03', 29, True),
('1994-09-23', 25, False)
]
data = [ {'dob': r[0], 'age': r[1], 'is_fan': r[2]} for r in data_list ]
user_df = spark.createDataFrame(data)
Pesan penghentian ditampilkan
C:\apps\spark-2.4.0-bin-hadoop2.7\python\pyspark\sql\session.py:346: UserWarning: inferring schema from dict is deprecated,please use pyspark.sql.Row insteadwarnings.warn("inferring schema from dict is deprecated,"
Memeriksa skema
|-- age: long (nullable = true)
|-- dob: string (nullable = true)
|-- is_fan: boolean (nullable = true)
Memeriksa data
user_df.show()+---+----------+------+|age| dob|is_fan|
+---+----------+------+
| 29|1990-05-03| true|
| 25|1994-09-23| false|
+---+----------+------+Melewati daftar objek Baris sebagai user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+0
Ada dua cara untuk membangun user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+4 objek
- Buat user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+_4 objek secara langsung. Dalam metode ini, nama kolom ditentukan sebagai nama parameter
# Produces: Row(dob='1990-05-03', age=29, is_fan=True)
- Buat user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+_4 objek menggunakan pabrik baris. Dengan metode ini pertama-tama kita membuat pabrik baris dan kemudian kita membuat user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+4 objek darinya
user_row = Row("dob", "age", "is_fan")
user_row('1990-05-03', 29, True)
# Produces: Row(dob='1990-05-03', age=29, is_fan=True)
Kami menggunakan metode kedua — pabrik baris
from pyspark.sql import Row
user_row = Row("dob", "age", "is_fan")
data = [
user_row('1990-05-03', 29, True),
user_row('1994-09-23', 25, False)
]
Sekarang kami membuat DataFrame dan memeriksa isinya
user_df = spark.createDataFrame(data)user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)0Buat pyspark DataFrame Menentukan Daftar Nama Kolom
Saat skema ditetapkan sebagai daftar nama bidang, jenis bidang disimpulkan dari data
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)_1
Ini masih mendukung metode lain untuk meneruskan data dengan bidang bernama, mis. g. daftar nametuple
user_df = spark.createDataFrame(data)user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)2Buat pyspark DataFrame Menentukan Skema sebagai StructType
Dengan metode ini pertama-tama kita perlu membuat objek skema user_df.show()+----------+---+------+
| dob|age|is_fan|
+----------+---+------+
|1990-05-03| 29| true|
|1994-09-23| 25| false|
+----------+---+------+8 dan meneruskannya sebagai argumen kedua ke metode user_df = spark.createDataFrame(data)
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)7 dari user_df = spark.createDataFrame(data)
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)6
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)_3
Metode ini cukup bertele-tele
Buat pyspark DataFrame Menentukan Skema sebagai tipe data StringDengan metode ini skema ditetapkan sebagai string. String menggunakan format yang sama dengan string yang dikembalikan oleh metode data_list = [
('1990-05-03', 29, True),
('1994-09-23', 25, False)
]
data = [ {'dob': r[0], 'age': r[1], 'is_fan': r[2]} for r in data_list ]
user_df = spark.createDataFrame(data)1. data_list = [
('1990-05-03', 29, True),
('1994-09-23', 25, False)
]
data = [ {'dob': r[0], 'age': r[1], 'is_fan': r[2]} for r in data_list ]
user_df = spark.createDataFrame(data)_2 dan tanda kurung dapat dihilangkan
String skema berikut ditafsirkan sama
- data_list = [
('1990-05-03', 29, True),
('1994-09-23', 25, False)
]
data = [ {'dob': r[0], 'age': r[1], 'is_fan': r[2]} for r in data_list ]
user_df = spark.createDataFrame(data)_3 - data_list = [
('1990-05-03', 29, True),
('1994-09-23', 25, False)
]
data = [ {'dob': r[0], 'age': r[1], 'is_fan': r[2]} for r in data_list ]
user_df = spark.createDataFrame(data)_4
user_df.printSchema()root
|-- dob: string (nullable = true)
|-- age: long (nullable = true)
|-- is_fan: boolean (nullable = true)4Lampiran A. Gunakan Skema JSONBuat Skema dari String JSON
Pertama kita perlu mengurai string JSON ke dalam kamus python dan kemudian kita bisa menggunakan StructType. fromJSON untuk membuat objek StructType