Chuyển đổi Khung dữ liệu PySpark thành JSON

Chuyen Doi Khung Du Lieu Pyspark Thanh Json



Có thể truyền dữ liệu có cấu trúc bằng JSON và cũng tiêu tốn ít bộ nhớ. Khi so sánh với PySpark RDD hoặc PySpark DataFrame, JSON tiêu thụ ít bộ nhớ và tuần tự hóa, điều có thể thực hiện được với JSON. Chúng tôi có thể chuyển đổi Khung dữ liệu PySpark thành JSON bằng phương thức pyspark.sql.DataFrameWriter.json(). Ngoài ra, còn có hai cách khác để chuyển đổi DataFrame thành JSON.

Nội dung chủ đề:

Hãy xem xét một Khung dữ liệu PySpark đơn giản trong tất cả các ví dụ và chuyển đổi nó thành JSON bằng các hàm được đề cập.







Mô-đun bắt buộc:

Cài đặt thư viện PySpark trong môi trường của bạn nếu nó chưa được cài đặt. Bạn có thể tham khảo lệnh sau để cài đặt nó:



pip cài đặt pyspark

Khung dữ liệu PySpark thành JSON bằng To_json() với ToPandas()

Phương thức to_json() có sẵn trong mô-đun Pandas để chuyển đổi Khung dữ liệu Pandas thành JSON. Chúng tôi có thể sử dụng phương pháp này nếu chúng tôi chuyển đổi Khung dữ liệu PySpark của mình thành Khung dữ liệu Pandas. Để chuyển đổi Khung dữ liệu PySpark thành Khung dữ liệu Pandas, phương thức toPandas() được sử dụng. Hãy xem cú pháp của to_json() cùng với các tham số của nó.



Cú pháp:





dataframe_object.toPandas().to_json(orient,index,...)
  1. Phương hướng được sử dụng để hiển thị JSON đã chuyển đổi thành định dạng mong muốn. Nó lấy 'bản ghi', 'bảng', 'giá trị', 'cột', 'chỉ mục', 'phân tách'.
  2. Chỉ mục được sử dụng để bao gồm/xóa chỉ mục khỏi chuỗi JSON đã chuyển đổi. Nếu nó được đặt thành “True”, các chỉ số sẽ được hiển thị. Mặt khác, các chỉ số sẽ không được hiển thị nếu định hướng là 'tách' hoặc 'bảng'.

Ví dụ 1: Định hướng là “Bản ghi”

Tạo Khung dữ liệu PySpark “skills_df” với 3 hàng và 4 cột. Chuyển đổi DataFrame này thành JSON bằng cách chỉ định tham số định hướng là “bản ghi”.

nhập pyspark

gấu trúc nhập khẩu

từ pyspark.sql nhập SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Gợi ý Linux' ).getOrCreate()

# dữ liệu kỹ năng có 3 hàng và 4 cột

kỹ năng =[{ 'nhận dạng' : 123 , 'người' : 'Em yêu' , 'kỹ năng' : 'bức vẽ' , 'phần thưởng' : 25000 },

{ 'nhận dạng' : 112 , 'người' : 'mouni' , 'kỹ năng' : 'nhảy' , 'phần thưởng' : 2000 },

{ 'nhận dạng' : 153 , 'người' : 'Tulasi' , 'kỹ năng' : 'đọc' , 'phần thưởng' : 1200 }

]

# tạo khung dữ liệu kỹ năng từ dữ liệu trên

Skills_df = linuxhint_spark_app.createDataFrame(kỹ năng)

# Dữ liệu kỹ năng thực tế

Skills_df.show()

# Chuyển đổi sang JSON sử dụng to_json() với định hướng là 'bản ghi'

json_skills_data = skills_df.toPandas().to_json(orient= 'Hồ sơ' )

in (json_skills_data)

Đầu ra:



+---+------+------+--------+

| id|người|giải thưởng| kỹ năng|

+---+------+------+--------+

| 123 | em yêu| 25000 |vẽ|

| 112 | Mouni| 2000 | khiêu vũ|

| 153 |Tulasi| 1200 | đọc|

+---+------+------+--------+

[{ 'nhận dạng' : 123 , 'người' : 'Em yêu' , 'phần thưởng' : 25000 , 'kỹ năng' : 'bức vẽ' },{ 'nhận dạng' : 112 , 'người' : 'mouni' , 'phần thưởng' : 2000 , 'kỹ năng' : 'nhảy' },{ 'nhận dạng' : 153 , 'người' : 'Tulasi' , 'phần thưởng' : 1200 , 'kỹ năng' : 'đọc' }]

Chúng ta có thể thấy rằng Khung dữ liệu PySpark được chuyển đổi thành mảng JSON với một từ điển các giá trị. Ở đây, các khóa đại diện cho tên cột và giá trị đại diện cho giá trị hàng/ô trong Khung dữ liệu PySpark.

Ví dụ 2: Định hướng là “Split”

Định dạng JSON được định hướng 'tách' trả về bao gồm các tên cột có danh sách cột, danh sách chỉ mục và danh sách dữ liệu. Sau đây là định dạng của định hướng 'tách'.

# Chuyển đổi sang JSON sử dụng to_json() với định hướng là 'split'

json_skills_data = skills_df.toPandas().to_json(orient= 'tách ra' )

in (json_skills_data)

Đầu ra:

{ 'cột' :[ 'nhận dạng' , 'người' , 'phần thưởng' , 'kỹ năng' ], 'mục lục' :[ 0 , 1 , 2 ], 'dữ liệu' :[[ 123 , 'Em yêu' , 25000 , 'bức vẽ' ],[ 112 , 'mouni' , 2000 , 'nhảy' ],[ 153 , 'Tulasi' , 1200 , 'đọc' ]]}

Ví dụ 3: Định hướng là “Chỉ mục”

Tại đây, mỗi hàng từ Khung dữ liệu PySpark được loại bỏ dưới dạng từ điển với khóa là tên cột. Đối với mỗi từ điển, vị trí chỉ mục được chỉ định làm khóa.

# Chuyển đổi sang JSON sử dụng to_json() với định hướng là 'index'

json_skills_data = skills_df.toPandas().to_json(orient= 'mục lục' )

in (json_skills_data)

Đầu ra:

{ '0' :{ 'nhận dạng' : 123 , 'người' : 'Em yêu' , 'phần thưởng' : 25000 , 'kỹ năng' : 'bức vẽ' }, '1' :{ 'nhận dạng' : 112 , 'người' : 'mouni' , 'phần thưởng' : 2000 , 'kỹ năng' : 'nhảy' }, '2' :{ 'nhận dạng' : 153 , 'người' : 'Tulasi' , 'phần thưởng' : 1200 , 'kỹ năng' : 'đọc' }}

Ví dụ 4: Định hướng là “Cột”

Các cột là chìa khóa cho mỗi bản ghi. Mỗi cột chứa một từ điển lấy các giá trị cột với số chỉ mục.

# Chuyển đổi sang JSON sử dụng to_json() với định hướng là 'cột'

json_skills_data = skills_df.toPandas().to_json(orient= 'cột' )

in (json_skills_data)

Đầu ra:

{ 'nhận dạng' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'người' :{ '0' : 'Em yêu' , '1' : 'mouni' , '2' : 'Tulasi' }, 'phần thưởng' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'kỹ năng' :{ '0' : 'bức vẽ' , '1' : 'nhảy' , '2' : 'đọc' }}

Ví dụ 5: Định hướng là “Giá trị”

Nếu bạn chỉ cần các giá trị trong JSON, bạn có thể chọn hướng 'giá trị'. Nó hiển thị từng hàng trong một danh sách. Cuối cùng, tất cả các danh sách được lưu trữ trong một danh sách. JSON này thuộc loại danh sách lồng nhau.

# Chuyển đổi sang JSON sử dụng to_json() với định hướng là 'giá trị'

json_skills_data = skills_df.toPandas().to_json(orient= 'giá trị' )

in (json_skills_data)

Đầu ra:

[[ 123 , 'Em yêu' , 25000 , 'bức vẽ' ],[ 112 , 'mouni' , 2000 , 'nhảy' ],[ 153 , 'Tulasi' , 1200 , 'đọc' ]]

Ví dụ 6: Định hướng là “Bảng”

Định hướng “bảng” trả về JSON bao gồm lược đồ có tên trường cùng với kiểu dữ liệu cột, chỉ mục làm khóa chính và phiên bản Pandas. Tên cột có giá trị được hiển thị dưới dạng 'dữ liệu'.

# Chuyển đổi sang JSON sử dụng to_json() với định hướng là 'bảng'

json_skills_data = skills_df.toPandas().to_json(orient= 'bàn' )

in (json_skills_data)

Đầu ra:

{ 'lược đồ' :{ 'lĩnh vực' :[{ 'tên' : 'mục lục' , 'kiểu' : 'số nguyên' },{ 'tên' : 'nhận dạng' , 'kiểu' : 'số nguyên' },{ 'tên' : 'người' , 'kiểu' : 'sợi dây' },{ 'tên' : 'phần thưởng' , 'kiểu' : 'số nguyên' },{ 'tên' : 'kỹ năng' , 'kiểu' : 'sợi dây' }], 'khóa chính' :[ 'mục lục' ], 'pandas_version' : '1.4.0' }, 'dữ liệu' :[{ 'mục lục' : 0 , 'nhận dạng' : 123 , 'người' : 'Em yêu' , 'phần thưởng' : 25000 , 'kỹ năng' : 'bức vẽ' },{ 'mục lục' : 1 , 'nhận dạng' : 112 , 'người' : 'mouni' , 'phần thưởng' : 2000 , 'kỹ năng' : 'nhảy' },{ 'mục lục' : 2 , 'nhận dạng' : 153 , 'người' : 'Tulasi' , 'phần thưởng' : 1200 , 'kỹ năng' : 'đọc' }]}

Ví dụ 7: Với tham số chỉ mục

Đầu tiên, chúng tôi chuyển tham số chỉ mục bằng cách đặt nó thành “True”. Bạn sẽ thấy đối với mỗi giá trị cột, vị trí chỉ mục được trả về dưới dạng khóa trong từ điển.

Trong đầu ra thứ hai, chỉ có tên cột (“cột”) và bản ghi (“dữ liệu”) được trả về mà không có vị trí chỉ mục do chỉ mục được đặt thành “Sai”.

# Chuyển đổi sang JSON sử dụng to_json() với index=True

json_skills_data = skills_df.toPandas().to_json(index=True)

in (json_skills_data, ' \N ' )

# Chuyển đổi sang JSON sử dụng to_json() với index=False

json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'tách ra' )

in (json_skills_data)

Đầu ra:

{ 'nhận dạng' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'người' :{ '0' : 'Em yêu' , '1' : 'mouni' , '2' : 'Tulasi' }, 'phần thưởng' :{ '0' : 25000 , '1' : 2000 , '2' : 1200 }, 'kỹ năng' :{ '0' : 'bức vẽ' , '1' : 'nhảy' , '2' : 'đọc' }}

{ 'cột' :[ 'nhận dạng' , 'người' , 'phần thưởng' , 'kỹ năng' ], 'dữ liệu' :[[ 123 , 'Em yêu' , 25000 , 'bức vẽ' ],[ 112 , 'mouni' , 2000 , 'nhảy' ],[ 153 , 'Tulasi' , 1200 , 'đọc' ]]

Khung dữ liệu PySpark thành JSON bằng ToJSON()

Phương thức toJSON() được sử dụng để chuyển đổi Khung dữ liệu PySpark thành đối tượng JSON. Về cơ bản, nó trả về một chuỗi JSON được bao quanh bởi một danh sách. Các [‘{cột:giá trị,…}’,…. ] là định dạng được trả về bởi chức năng này. Tại đây, mỗi hàng từ Khung dữ liệu PySpark được trả về dưới dạng từ điển với tên cột là khóa.

Cú pháp:

dataframe_object.toJSON()

Có thể truyền các tham số như chỉ mục, nhãn cột và kiểu dữ liệu.

Ví dụ:

Tạo Khung dữ liệu PySpark “skills_df” với 5 hàng và 4 cột. Chuyển đổi DataFrame này thành JSON bằng phương thức toJSON().

nhập pyspark

từ pyspark.sql nhập SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Gợi ý Linux' ).getOrCreate()

# dữ liệu kỹ năng có 5 hàng và 4 cột

kỹ năng =[{ 'nhận dạng' : 123 , 'người' : 'Em yêu' , 'kỹ năng' : 'bức vẽ' , 'phần thưởng' : 25000 },

{ 'nhận dạng' : 112 , 'người' : 'mouni' , 'kỹ năng' : 'âm nhạc/khiêu vũ' , 'phần thưởng' : 2000 },

{ 'nhận dạng' : 153 , 'người' : 'Tulasi' , 'kỹ năng' : 'đọc' , 'phần thưởng' : 1200 },

{ 'nhận dạng' : 173 , 'người' : 'Đã chạy' , 'kỹ năng' : 'âm nhạc' , 'phần thưởng' : 2000 },

{ 'nhận dạng' : 43 , 'người' : 'Kamala' , 'kỹ năng' : 'đọc' , 'phần thưởng' : 10000 }

]

# tạo khung dữ liệu kỹ năng từ dữ liệu trên

Skills_df = linuxhint_spark_app.createDataFrame(kỹ năng)

# Dữ liệu kỹ năng thực tế

skill_df.show()

# Chuyển đổi sang mảng JSON

json_skills_data = skills_df.toJSON().collect()

in (json_skills_data)

Đầu ra:

+---+------+------+---------+

| id|người|giải thưởng| kỹ năng|

+---+------+------+---------+

| 123 | em yêu| 25000 | bức tranh|

| 112 | Mouni| 2000 |âm nhạc/khiêu vũ|

| 153 |Tulasi| 1200 | đọc|

| 173 | chạy | 2000 | âm nhạc |

| 43 |Kamala| 10000 | đọc|

+---+------+------+---------+

[ '{'id':123,'person':'Honey','prize':25000,'skill':'painting'}' , '{'id':112,'person':'Mouni','prize':2000,'skill':'music/dance'}' , '{'id':153,'person':'Tulasi','prize':1200,'skill':'reading'}' , '{'id':173,'person':'Ran','prize':2000,'skill':'music'}' , '{'id':43,'person':'Kamala','prize':10000,'skill':'reading'}' ]

Có 5 hàng trong Khung dữ liệu PySpark. Tất cả 5 hàng này được trả về dưới dạng một từ điển các chuỗi được phân tách bằng dấu phẩy.

Khung dữ liệu PySpark thành JSON bằng cách sử dụng Write.json ()

Phương thức write.json() có sẵn trong PySpark để ghi/lưu Khung dữ liệu PySpark vào tệp JSON. Nó lấy tên/đường dẫn tệp làm tham số. Về cơ bản, nó trả về JSON trong nhiều tệp (tệp được phân vùng). Để hợp nhất tất cả chúng trong một tệp duy nhất, chúng ta có thể sử dụng phương thức kết hợp ().

Cú pháp:

dataframe_object.coalesce( 1 ).write.json(‘tên_tệp’)
  1. Chế độ nối thêm – dataframe_object.write.mode(‘append’).json(‘file_name’)
  2. Chế độ ghi đè – dataframe_object.write.mode(‘ghi đè’).json(‘file_name’)

Có thể nối thêm/ghi đè JSON hiện có. Sử dụng write.mode(), chúng ta có thể nối thêm dữ liệu bằng cách chuyển “append” hoặc ghi đè lên dữ liệu JSON hiện có bằng cách chuyển “overwrite” cho hàm này.

Ví dụ 1:

Tạo Khung dữ liệu PySpark “skills_df” với 3 hàng và 4 cột. Viết DataFrame này thành JSON.

nhập pyspark

gấu trúc nhập khẩu

từ pyspark.sql nhập SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Gợi ý Linux' ).getOrCreate()

# dữ liệu kỹ năng có 3 hàng và 4 cột

kỹ năng =[{ 'nhận dạng' : 123 , 'người' : 'Em yêu' , 'kỹ năng' : 'bức vẽ' , 'phần thưởng' : 25000 },

{ 'nhận dạng' : 112 , 'người' : 'mouni' , 'kỹ năng' : 'nhảy' , 'phần thưởng' : 2000 },

{ 'nhận dạng' : 153 , 'người' : 'Tulasi' , 'kỹ năng' : 'đọc' , 'phần thưởng' : 1200 }

]

# tạo khung dữ liệu kỹ năng từ dữ liệu trên

Skills_df = linuxhint_spark_app.createDataFrame(kỹ năng)

# write.json()

skill_df.coalesce( 1 .write.json( 'kỹ năng_dữ liệu' )

Tệp JSON:

Chúng ta có thể thấy rằng thư mục Skills_data bao gồm dữ liệu JSON được phân vùng.

Hãy mở tệp JSON. Chúng ta có thể thấy rằng tất cả các hàng từ Khung dữ liệu PySpark được chuyển đổi thành JSON.

Có 5 hàng trong Khung dữ liệu PySpark. Tất cả 5 hàng này được trả về dưới dạng một từ điển các chuỗi được phân tách bằng dấu phẩy.

Ví dụ 2:

Tạo Khung dữ liệu PySpark “skills2_df” với một hàng. Nối một hàng vào tệp JSON trước đó bằng cách chỉ định chế độ là “chắp thêm”.

nhập pyspark

gấu trúc nhập khẩu

từ pyspark.sql nhập SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Gợi ý Linux' ).getOrCreate()

kỹ năng2 =[{ 'nhận dạng' : 78 , 'người' : 'Mary' , 'kỹ năng' : 'cưỡi' , 'phần thưởng' : 8960 }

]

# tạo khung dữ liệu kỹ năng từ dữ liệu trên

skills2_df = linuxhint_spark_app.createDataFrame(skills2)

# write.json() với chế độ nối thêm.

skill2_df.write.mode( 'nối' .json( 'kỹ năng_dữ liệu' )

Tệp JSON:

Chúng ta có thể thấy các tệp JSON được phân vùng. Tệp đầu tiên chứa các bản ghi DataFrame đầu tiên và tệp thứ hai chứa bản ghi DataFrame thứ hai.

Phần kết luận

Có ba cách khác nhau để chuyển đổi Khung dữ liệu PySpark thành JSON. Đầu tiên, chúng ta đã thảo luận về phương thức to_json() chuyển đổi thành JSON bằng cách chuyển đổi Khung dữ liệu PySpark thành Khung dữ liệu Pandas với các ví dụ khác nhau bằng cách xem xét các tham số khác nhau. Tiếp theo, chúng tôi sử dụng phương thức toJSON(). Cuối cùng, chúng ta đã học cách sử dụng hàm write.json() để ghi Khung dữ liệu PySpark thành JSON. Có thể nối thêm và ghi đè với chức năng này.