หัวข้อเนื้อหา:
- PySpark DataFrame เป็น JSON โดยใช้ To_json() กับ ToPandas()
- PySpark DataFrame เป็น JSON โดยใช้ ToJSON()
- PySpark DataFrame เป็น JSON โดยใช้ Write.json()
ลองพิจารณา PySpark DataFrame ง่ายๆ ในตัวอย่างทั้งหมดแล้วแปลงเป็น JSON โดยใช้ฟังก์ชันที่กล่าวถึง
โมดูลที่จำเป็น:
ติดตั้งไลบรารี PySpark ในสภาพแวดล้อมของคุณหากยังไม่ได้ติดตั้ง คุณสามารถอ้างถึงคำสั่งต่อไปนี้เพื่อติดตั้ง:
pip ติดตั้ง pyspark
PySpark DataFrame เป็น JSON โดยใช้ To_json() กับ ToPandas()
เมธอด to_json() มีอยู่ในโมดูล Pandas ซึ่งจะแปลง Pandas DataFrame เป็น JSON เราสามารถใช้วิธีนี้ได้หากเราแปลง PySpark DataFrame เป็น Pandas DataFrame ในการแปลง PySpark DataFrame เป็น Pandas DataFrame จะใช้วิธี toPandas() มาดูไวยากรณ์ของ to_json() พร้อมกับพารามิเตอร์
ไวยากรณ์:
dataframe_object.toPandas().to_json(orient,ดัชนี,...)
- Orient ใช้เพื่อแสดง JSON ที่แปลงเป็นรูปแบบที่ต้องการ ใช้ 'บันทึก', 'ตาราง', 'ค่า', 'คอลัมน์', 'ดัชนี', 'แยก'
- ดัชนีใช้เพื่อรวม/ลบดัชนีออกจากสตริง JSON ที่แปลงแล้ว หากตั้งค่าเป็น 'จริง' ดัชนีจะแสดงขึ้น มิฉะนั้น ดัชนีจะไม่แสดงหากทิศทางเป็น 'แยก' หรือ 'ตาราง'
ตัวอย่างที่ 1: ปรับทิศทางเป็น “บันทึก”
สร้าง “skills_df” PySpark DataFrame ที่มี 3 แถวและ 4 คอลัมน์ แปลง DataFrame นี้เป็น JSON โดยระบุพารามิเตอร์ orient เป็น 'records'
นำเข้า pysparkนำเข้าแพนด้า
จาก pyspark.sql นำเข้า SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'คำแนะนำลินุกซ์' ).getOrCreate()
# ข้อมูลทักษะที่มี 3 แถวและ 4 คอลัมน์
ทักษะ =[{ 'รหัส' : 123 , 'บุคคล' : 'น้ำผึ้ง' , 'ทักษะ' : 'จิตรกรรม' , 'รางวัล' : 25000 },
{ 'รหัส' : 112 , 'บุคคล' : 'มูนี่' , 'ทักษะ' : 'เต้นรำ' , 'รางวัล' : 2543 },
{ 'รหัส' : 153 , 'บุคคล' : 'ทูลาซี' , 'ทักษะ' : 'การอ่าน' , 'รางวัล' : 1200 }
]
# สร้าง dataframe ทักษะจากข้อมูลด้านบน
Skills_df = linuxhint_spark_app.createDataFrame (ทักษะ)
# ข้อมูลทักษะจริง
ทักษะ_df.แสดง()
# แปลงเป็น JSON โดยใช้ to_json() โดยมี orient เป็น 'บันทึก'
json_skills_data = skills_df.toPandas().to_json(orient= 'บันทึก' )
พิมพ์ (json_skills_data)
เอาท์พุต:
+---+------+-----+--------+
| รหัส|บุคคล|รางวัล| ทักษะ|
+---+------+-----+--------+
| 123 | น้ำผึ้ง| 25000 |จิตรกรรม|
| 112 | มูนี่| 2543 | เต้นรำ|
| 153 |ทูลาซี| 1200 | กำลังอ่าน|
+---+------+-----+--------+
[{ 'รหัส' : 123 , 'บุคคล' : 'น้ำผึ้ง' , 'รางวัล' : 25000 , 'ทักษะ' : 'จิตรกรรม' },{ 'รหัส' : 112 , 'บุคคล' : 'มูนี่' , 'รางวัล' : 2543 , 'ทักษะ' : 'เต้นรำ' },{ 'รหัส' : 153 , 'บุคคล' : 'ทูลาซี' , 'รางวัล' : 1200 , 'ทักษะ' : 'การอ่าน' }]
เราจะเห็นว่า PySpark DataFrame ถูกแปลงเป็นอาร์เรย์ JSON ด้วยพจนานุกรมของค่า ที่นี่ คีย์แสดงถึงชื่อคอลัมน์และค่าแสดงถึงค่าแถว/เซลล์ใน PySpark DataFrame
ตัวอย่างที่ 2: ปรับทิศทางเป็น “แยก”
รูปแบบ JSON ที่ส่งคืนโดย 'แยก' orient รวมถึงชื่อคอลัมน์ซึ่งมีรายการคอลัมน์ รายการดัชนี และรายการข้อมูล ต่อไปนี้เป็นรูปแบบของ 'แยก' orient
# แปลงเป็น JSON โดยใช้ to_json() โดยมี orient เป็น 'split'
json_skills_data = skills_df.toPandas().to_json(orient= 'แยก' )
พิมพ์ (json_skills_data)
เอาท์พุต:
{ 'คอลัมน์' :[ 'รหัส' , 'บุคคล' , 'รางวัล' , 'ทักษะ' ] 'ดัชนี' :[ 0 , 1 , 2 ] 'ข้อมูล' :[[ 123 , 'น้ำผึ้ง' , 25000 , 'จิตรกรรม' ],[ 112 , 'มูนี่' , 2543 , 'เต้นรำ' ],[ 153 , 'ทูลาซี' , 1200 , 'การอ่าน' ]]}ตัวอย่างที่ 3: ปรับทิศทางเป็น “ดัชนี”
ที่นี่ แต่ละแถวจาก PySpark DataFrame จะถูกยกเลิกในรูปแบบของพจนานุกรมโดยมีคีย์เป็นชื่อคอลัมน์ สำหรับแต่ละพจนานุกรม ตำแหน่งดัชนีจะถูกระบุเป็นคีย์
# แปลงเป็น JSON โดยใช้ to_json() โดยมี orient เป็น 'index'
json_skills_data = skills_df.toPandas().to_json(orient= 'ดัชนี' )
พิมพ์ (json_skills_data)
เอาท์พุต:
{ '0' :{ 'รหัส' : 123 , 'บุคคล' : 'น้ำผึ้ง' , 'รางวัล' : 25000 , 'ทักษะ' : 'จิตรกรรม' }, '1' :{ 'รหัส' : 112 , 'บุคคล' : 'มูนี่' , 'รางวัล' : 2543 , 'ทักษะ' : 'เต้นรำ' }, '2' :{ 'รหัส' : 153 , 'บุคคล' : 'ทูลาซี' , 'รางวัล' : 1200 , 'ทักษะ' : 'การอ่าน' }}ตัวอย่างที่ 4: วางแนวเป็น “คอลัมน์”
คอลัมน์เป็นกุญแจสำคัญสำหรับแต่ละระเบียน แต่ละคอลัมน์มีพจนานุกรมที่ใช้ค่าคอลัมน์พร้อมหมายเลขดัชนี
# แปลงเป็น JSON โดยใช้ to_json() โดยมี orient เป็น 'คอลัมน์'
json_skills_data = skills_df.toPandas().to_json(orient= 'คอลัมน์' )
พิมพ์ (json_skills_data)
เอาท์พุต:
{ 'รหัส' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'บุคคล' :{ '0' : 'น้ำผึ้ง' , '1' : 'มูนี่' , '2' : 'ทูลาซี' }, 'รางวัล' :{ '0' : 25000 , '1' : 2543 , '2' : 1200 }, 'ทักษะ' :{ '0' : 'จิตรกรรม' , '1' : 'เต้นรำ' , '2' : 'การอ่าน' }}ตัวอย่างที่ 5: Orient as “Values”
หากคุณต้องการเฉพาะค่าใน JSON คุณสามารถไปที่ 'ค่า' orient จะแสดงแต่ละแถวในรายการ สุดท้าย รายการทั้งหมดจะถูกเก็บไว้ในรายการ JSON นี้เป็นประเภทรายการที่ซ้อนกัน
# แปลงเป็น JSON โดยใช้ to_json() โดยมี orient เป็น 'ค่า'
json_skills_data = skills_df.toPandas().to_json(orient= 'ค่า' )
พิมพ์ (json_skills_data)
เอาท์พุต:
[[ 123 , 'น้ำผึ้ง' , 25000 , 'จิตรกรรม' ],[ 112 , 'มูนี่' , 2543 , 'เต้นรำ' ],[ 153 , 'ทูลาซี' , 1200 , 'การอ่าน' ]]ตัวอย่างที่ 6: วางแนวเป็น “ตาราง”
orient 'ตาราง' ส่งคืน JSON ที่มีสคีมาพร้อมชื่อฟิลด์พร้อมกับประเภทข้อมูลคอลัมน์ ดัชนีเป็นคีย์หลัก และเวอร์ชัน Pandas ชื่อคอลัมน์ที่มีค่าจะแสดงเป็น 'ข้อมูล'
# แปลงเป็น JSON โดยใช้ to_json() โดยมี orient เป็น 'table'
json_skills_data = skills_df.toPandas().to_json(orient= 'โต๊ะ' )
พิมพ์ (json_skills_data)
เอาท์พุต:
{ 'สคีมา' :{ 'ฟิลด์' :[{ 'ชื่อ' : 'ดัชนี' , 'พิมพ์' : 'จำนวนเต็ม' },{ 'ชื่อ' : 'รหัส' , 'พิมพ์' : 'จำนวนเต็ม' },{ 'ชื่อ' : 'บุคคล' , 'พิมพ์' : 'สตริง' },{ 'ชื่อ' : 'รางวัล' , 'พิมพ์' : 'จำนวนเต็ม' },{ 'ชื่อ' : 'ทักษะ' , 'พิมพ์' : 'สตริง' }], 'คีย์หลัก' :[ 'ดัชนี' ] 'แพนด้า_เวอร์ชั่น' : '1.4.0' }, 'ข้อมูล' :[{ 'ดัชนี' : 0 , 'รหัส' : 123 , 'บุคคล' : 'น้ำผึ้ง' , 'รางวัล' : 25000 , 'ทักษะ' : 'จิตรกรรม' },{ 'ดัชนี' : 1 , 'รหัส' : 112 , 'บุคคล' : 'มูนี่' , 'รางวัล' : 2543 , 'ทักษะ' : 'เต้นรำ' },{ 'ดัชนี' : 2 , 'รหัส' : 153 , 'บุคคล' : 'ทูลาซี' , 'รางวัล' : 1200 , 'ทักษะ' : 'การอ่าน' }]}ตัวอย่างที่ 7: ด้วยพารามิเตอร์ดัชนี
ขั้นแรก เราส่งพารามิเตอร์ดัชนีโดยตั้งค่าเป็น 'จริง' คุณจะเห็นค่าแต่ละคอลัมน์ที่ตำแหน่งดัชนีถูกส่งกลับเป็นคีย์ในพจนานุกรม
ในเอาต์พุตที่สอง เฉพาะชื่อคอลัมน์ ('คอลัมน์') และระเบียน ('ข้อมูล') เท่านั้นที่จะถูกส่งกลับโดยไม่มีตำแหน่งดัชนี เนื่องจากดัชนีถูกตั้งค่าเป็น 'เท็จ'
# แปลงเป็น JSON โดยใช้ to_json() กับ index=Truejson_skills_data = skills_df.toPandas().to_json(ดัชนี=จริง)
พิมพ์ (json_skills_data, ' \n ' )
# แปลงเป็น JSON โดยใช้ to_json() กับ index=False
json_skills_data= skills_df.toPandas().to_json(index=False,orient= 'แยก' )
พิมพ์ (json_skills_data)
เอาท์พุต:
{ 'รหัส' :{ '0' : 123 , '1' : 112 , '2' : 153 }, 'บุคคล' :{ '0' : 'น้ำผึ้ง' , '1' : 'มูนี่' , '2' : 'ทูลาซี' }, 'รางวัล' :{ '0' : 25000 , '1' : 2543 , '2' : 1200 }, 'ทักษะ' :{ '0' : 'จิตรกรรม' , '1' : 'เต้นรำ' , '2' : 'การอ่าน' }}{ 'คอลัมน์' :[ 'รหัส' , 'บุคคล' , 'รางวัล' , 'ทักษะ' ] 'ข้อมูล' :[[ 123 , 'น้ำผึ้ง' , 25000 , 'จิตรกรรม' ],[ 112 , 'มูนี่' , 2543 , 'เต้นรำ' ],[ 153 , 'ทูลาซี' , 1200 , 'การอ่าน' ]]
PySpark DataFrame เป็น JSON โดยใช้ ToJSON()
เมธอด toJSON() ใช้เพื่อแปลง PySpark DataFrame เป็นวัตถุ JSON โดยพื้นฐานแล้ว จะส่งคืนสตริง JSON ซึ่งล้อมรอบด้วยรายการ เดอะ [‘{คอลัมน์:ค่า,…}’,…. ] เป็นรูปแบบที่ส่งคืนโดยฟังก์ชันนี้ ที่นี่ แต่ละแถวจาก PySpark DataFrame จะถูกส่งกลับเป็นพจนานุกรมโดยมีชื่อคอลัมน์เป็นคีย์
ไวยากรณ์:
dataframe_object.toJSON()สามารถส่งผ่านพารามิเตอร์ เช่น ดัชนี ป้ายชื่อคอลัมน์ และประเภทข้อมูลได้
ตัวอย่าง:
สร้าง “skills_df” PySpark DataFrame ที่มี 5 แถวและ 4 คอลัมน์ แปลง DataFrame นี้เป็น JSON โดยใช้วิธี toJSON()
นำเข้า pysparkจาก pyspark.sql นำเข้า SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'คำแนะนำลินุกซ์' ).getOrCreate()
# ข้อมูลทักษะที่มี 5 แถวและ 4 คอลัมน์
ทักษะ =[{ 'รหัส' : 123 , 'บุคคล' : 'น้ำผึ้ง' , 'ทักษะ' : 'จิตรกรรม' , 'รางวัล' : 25000 },
{ 'รหัส' : 112 , 'บุคคล' : 'มูนี่' , 'ทักษะ' : 'ดนตรี/เต้นรำ' , 'รางวัล' : 2543 },
{ 'รหัส' : 153 , 'บุคคล' : 'ทูลาซี' , 'ทักษะ' : 'การอ่าน' , 'รางวัล' : 1200 },
{ 'รหัส' : 173 , 'บุคคล' : 'รัน' , 'ทักษะ' : 'ดนตรี' , 'รางวัล' : 2543 },
{ 'รหัส' : 43 , 'บุคคล' : 'กมลา' , 'ทักษะ' : 'การอ่าน' , 'รางวัล' : 10,000 }
]
# สร้าง dataframe ทักษะจากข้อมูลด้านบน
Skills_df = linuxhint_spark_app.createDataFrame (ทักษะ)
# ข้อมูลทักษะจริง
ทักษะ_df.แสดง()
# แปลงเป็นอาร์เรย์ JSON
json_skills_data = skills_df.toJSON().collect()
พิมพ์ (json_skills_data)
เอาท์พุต:
+---+------+-----+-----------+| รหัส|บุคคล|รางวัล| ทักษะ|
+---+------+-----+-----------+
| 123 | น้ำผึ้ง| 25000 | จิตรกรรม|
| 112 | มูนี่| 2543 |ดนตรี/เต้นรำ|
| 153 |ทูลาซี| 1200 | กำลังอ่าน|
| 173 | วิ่ง| 2543 | ดนตรี|
| 43 |กมลา| 10,000 | กำลังอ่าน|
+---+------+-----+-----------+
[ '{'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':'กมลา','prize':10000,'skill':'reading'}' ]
มี 5 แถวใน PySpark DataFrame แถวทั้ง 5 นี้จะถูกส่งกลับเป็นพจนานุกรมของสตริงซึ่งคั่นด้วยเครื่องหมายจุลภาค
PySpark DataFrame เป็น JSON โดยใช้ Write.json()
เมธอด write.json() มีอยู่ใน PySpark ซึ่งเขียน/บันทึก PySpark DataFrame ลงในไฟล์ JSON ใช้ชื่อไฟล์/พาธเป็นพารามิเตอร์ โดยพื้นฐานแล้ว จะส่งคืน JSON ในหลายไฟล์ (ไฟล์ที่แบ่งพาร์ติชัน) ในการรวมทั้งหมดไว้ในไฟล์เดียว เราสามารถใช้เมธอด coalesce()
ไวยากรณ์:
dataframe_object.coalesce( 1 ).write.json('file_name')- ต่อท้ายโหมด – dataframe_object.write.mode('ผนวก').json('file_name')
- โหมดเขียนทับ – dataframe_object.write.mode('เขียนทับ').json('file_name')
สามารถผนวก/เขียนทับ JSON ที่มีอยู่ได้ เมื่อใช้ write.mode() เราสามารถผนวกข้อมูลโดยผ่าน 'ผนวก' หรือเขียนทับข้อมูล JSON ที่มีอยู่โดยส่ง 'เขียนทับ' ไปยังฟังก์ชันนี้
ตัวอย่างที่ 1:
สร้าง “skills_df” PySpark DataFrame ที่มี 3 แถวและ 4 คอลัมน์ เขียน DataFrame นี้ไปยัง JSON
นำเข้า pysparkนำเข้าแพนด้า
จาก pyspark.sql นำเข้า SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'คำแนะนำลินุกซ์' ).getOrCreate()
# ข้อมูลทักษะที่มี 3 แถวและ 4 คอลัมน์
ทักษะ =[{ 'รหัส' : 123 , 'บุคคล' : 'น้ำผึ้ง' , 'ทักษะ' : 'จิตรกรรม' , 'รางวัล' : 25000 },
{ 'รหัส' : 112 , 'บุคคล' : 'มูนี่' , 'ทักษะ' : 'เต้นรำ' , 'รางวัล' : 2543 },
{ 'รหัส' : 153 , 'บุคคล' : 'ทูลาซี' , 'ทักษะ' : 'การอ่าน' , 'รางวัล' : 1200 }
]
# สร้าง dataframe ทักษะจากข้อมูลด้านบน
Skills_df = linuxhint_spark_app.createDataFrame (ทักษะ)
#write.json()
Skills_df.coalesce( 1 ).write.json( 'ข้อมูลทักษะ' )
ไฟล์ JSON:
เราจะเห็นว่าโฟลเดอร์ Skills_data มีข้อมูล JSON ที่แบ่งพาร์ติชันแล้ว
มาเปิดไฟล์ JSON กัน เราจะเห็นว่าแถวทั้งหมดจาก PySpark DataFrame ถูกแปลงเป็น JSON
มี 5 แถวใน PySpark DataFrame แถวทั้ง 5 นี้จะถูกส่งกลับเป็นพจนานุกรมของสตริงซึ่งคั่นด้วยเครื่องหมายจุลภาค
ตัวอย่างที่ 2:
สร้าง “skills2_df” PySpark DataFrame ด้วยหนึ่งแถว ต่อท้ายหนึ่งแถวต่อไฟล์ JSON ก่อนหน้าโดยระบุโหมดเป็น 'ต่อท้าย'
นำเข้า pysparkนำเข้าแพนด้า
จาก pyspark.sql นำเข้า SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'คำแนะนำลินุกซ์' ).getOrCreate()
ทักษะ2 =[{ 'รหัส' : 78 , 'บุคคล' : 'แมรี่' , 'ทักษะ' : 'ขี่' , 'รางวัล' : 8960 }
]
# สร้าง dataframe ทักษะจากข้อมูลด้านบน
ทักษะ 2_df = linuxhint_spark_app.createDataFrame (ทักษะ 2)
# write.json() พร้อมโหมดต่อท้าย
ทักษะ2_df.write.mode( 'ผนวก' ).json( 'ข้อมูลทักษะ' )
ไฟล์ JSON:
เราสามารถเห็นไฟล์ JSON ที่แบ่งพาร์ติชัน ไฟล์แรกเก็บบันทึก DataFrame แรก และไฟล์ที่สองเก็บบันทึก DataFrame ที่สอง
บทสรุป
มีสามวิธีในการแปลง PySpark DataFrame เป็น JSON ขั้นแรก เราได้กล่าวถึงเมธอด to_json() ซึ่งแปลงเป็น JSON โดยการแปลง PySpark DataFrame เป็น Pandas DataFrame ด้วยตัวอย่างต่างๆ โดยพิจารณาจากพารามิเตอร์ต่างๆ ต่อไปเราใช้เมธอด toJSON() สุดท้าย เราได้เรียนรู้วิธีใช้ฟังก์ชัน write.json() เพื่อเขียน PySpark DataFrame ไปยัง JSON การต่อท้ายและการเขียนทับเป็นไปได้ด้วยฟังก์ชันนี้