Python membuat kerangka data dari objek kelas

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

Buat DataFrame pyspark Tanpa Menentukan Skema

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

from collections import namedtuple

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|
+----------+---+------+
0
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)

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 instead
warnings.warn("inferring schema from dict is deprecated,"

Memeriksa skema

user_df.printSchema()root
|-- 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
Row(dob='1990-05-03', age=29, is_fan=True)
# 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
# Create row factory user_row
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 = spark.createDataFrame(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 = spark.createDataFrame(data)
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 String

Dengan 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 = spark.createDataFrame(data)
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

Bagaimana Anda mengubah objek menjadi DataFrame dengan Python?

Konversi Daftar ke DataFrame dengan Python .
2) Menggunakan daftar dengan nama indeks dan kolom. Kita dapat membuat bingkai data dengan memberi nama pada kolom dan mengindeks baris. .
3) Menggunakan fungsi zip(). .
4) Membuat dari daftar multi-dimensi. .
5) Menggunakan daftar multidimensi dengan nama kolom. .
6) Menggunakan daftar dalam kamus

Objek Python apa yang Anda masukkan ke DataFrame?

astype() digunakan untuk mentransmisikan objek panda ke dtype tertentu.

Apa yang tidak dapat digunakan untuk membuat DataFrame?

Anda tidak dapat menggunakan kamus tupel untuk membuat bingkai data.

Bagaimana Anda mengubah seri menjadi DataFrame?

Dalam panda, mengonversi seri menjadi DataFrame adalah proses yang mudah. panda menggunakan metode to_frame() untuk dengan mudah mengubah rangkaian menjadi bingkai data. .
Nama yang diteruskan harus menggantikan nama seri (jika ada)
Kesalahannya adalah Tidak Ada
Mengembalikan representasi DataFrame dari Seri