Dataframe ใน Apache PySpark: บทช่วยสอนที่ครอบคลุม [พร้อมตัวอย่าง]

เผยแพร่แล้ว: 2020-02-27

วันนี้ เราจะมาเรียนรู้เกี่ยวกับ DataFrame ใน Apache PySpark Pyspark เป็นหนึ่งในเครื่องมือวิทยาศาสตร์ข้อมูลชั้นนำในปี 2020 โดยได้รับการตั้งชื่อว่าคอลัมน์ของคอลเล็กชันแถวแบบกระจายใน Apache Spark คล้ายกับตารางหรือคอลัมน์ในแผ่นงาน Excel และคล้ายกับตารางฐานข้อมูลเชิงสัมพันธ์ PySpark DataFrame ยังมีคุณลักษณะที่คล้ายคลึงกันของ RDD ซึ่งได้แก่:

กระจาย: ลักษณะของ DataFrame และ RDD มีทั้งแบบกระจาย

การ ประเมินแบบขี้เกียจ: งานจะไม่เสร็จหากไม่มีการดำเนินการ

ลักษณะของความไม่เปลี่ยนรูป: ลักษณะอื่นที่คล้ายคลึงกันของ RDD / DataFrame อีกอย่างหนึ่งก็คือ จะไม่สามารถเปลี่ยนแปลงได้เมื่อสร้างขึ้น แต่ใครๆ ก็สามารถใช้การแปลงเพื่อแปลง RDD / DataFrame ได้

สารบัญ

ข้อดีของ DataFrames

1. รองรับหลายภาษา เช่น Java, Scala, R, Python ซึ่งมีประโยชน์ในแง่ของการรองรับ API การสนับสนุน API สำหรับหลายภาษาช่วยในการทำงานกับภาษาการเขียนโปรแกรมหลายภาษา

2. DataFrame รองรับแหล่งข้อมูลและรูปแบบที่หลากหลาย ซึ่งช่วยให้สามารถใช้แหล่งข้อมูลและรูปแบบที่แตกต่างกันได้อย่างสะดวกสบาย

3. หนึ่งในส่วนที่ดีที่สุดเกี่ยวกับ DataFrame ก็คือมันสามารถจัดการข้อมูลระดับเพตะไบต์ ซึ่งเป็นความสามารถที่โดดเด่นในการจัดการข้อมูลขนาดใหญ่เช่นนั้น

4. Apache Spark เข้าใจสคีมาของ DataFrame อย่างรวดเร็วด้วยการสังเกตใน Spark DataFrame ภายใต้คอลัมน์ที่มีชื่อ การสังเกตของ Spark DataFrame จะถูกจัดระเบียบ ด้วยวิธีนี้ แผนการดำเนินการค้นหาจะได้รับการปรับให้เหมาะสม

5. ปริมาณมากของข้อมูลกึ่งโครงสร้างและโครงสร้างสามารถประมวลผลได้อย่างรวดเร็วเพราะได้รับการออกแบบมาเพื่อทำ DataFrames

Apache Spark Setup

ควรตั้งค่า Apache Spark ในเครื่องก่อนจึงจะสามารถเริ่มใช้งาน DataFrame Operations ได้ ข้อมูลสามารถดำเนินการได้ด้วยการสนับสนุน DataFrame เนื่องจากรองรับการทำงาน DataFrame ต่างๆ เราจะพูดถึงการดำเนินการทั่วไปของ DataFrame

การสร้าง SparkContext เป็นขั้นตอนแรกในการเขียนโปรแกรม Apache สำหรับการดำเนินการในคลัสเตอร์ มีข้อกำหนดของ SparkContext SparkContext บอกวิธีเข้าถึงคลัสเตอร์ นอกจากนี้ยังแสดง Spark เกี่ยวกับตำแหน่งเพื่อรับคลัสเตอร์

อ่าน: กรอบการเรียนรู้เชิงลึก

จากนั้นจึงสร้างการเชื่อมต่อ Apache Cluster การสร้างเสร็จสิ้นแล้วหากมีการใช้ Spark Shell อีกวิธีหนึ่งคือสามารถจัดเตรียมการตั้งค่าการกำหนดค่าเริ่มต้นและนำเข้าเพื่อสร้าง SparkContext

หนึ่งสามารถใช้รหัสนี้สำหรับการสร้าง:

จาก pyspark นำเข้า SparkContext

sc = SparkContext()

การสร้าง DataFrame จากไฟล์ CSV

ต้องระบุไลบรารีใหม่ในเชลล์ของ python เพื่อให้สามารถอ่านไฟล์ CSV ได้ ในการทำเช่นนี้ ขั้นตอนแรกคือการดาวน์โหลดเวอร์ชันล่าสุดของแพ็คเกจ Spark-CSV และทำการแตกไฟล์แพ็คเกจในโฮมไดเร็กทอรีของ Spark หลังจากนั้นเราจะเปิดเปลือกของ PySpark และต้องรวมแพ็คเกจด้วย

$ ./bin/pyspark –packages com.databricks:spark-csv_2.10:1.3.0

ตอนนี้ DataFrame จะถูกสร้างขึ้นหลังจากอ่านข้อมูลจากไฟล์ CSV แล้ว

train = sqlContext.load(source=”com.databricks.spark.csv”, path = 'PATH/train.csv', header = True,inferSchema = True)

test = sqlContext.load(source=”com.databricks.spark.csv”, path = 'PATH/test-comb.csv', header = True,inferSchema = True)

ไฟล์ CSV ทดสอบและไฟล์ CSV ฝึกจะอยู่ในตำแหน่งโฟลเดอร์ที่เรียกว่า PATH หากมีส่วนหัวอยู่ในไฟล์ CSV ก็จะแสดงเป็น True หากต้องการทราบประเภทของข้อมูลในแต่ละคอลัมน์ของ data frame เราจะใช้ตัวเลือก inferSchema = True โดยใช้ตัวเลือก inferSchema = True การตรวจหาชนิดข้อมูลของแต่ละคอลัมน์ของ data frame จะถูกตรวจพบโดยอัตโนมัติตามบริบทของ SQL คอลัมน์ทั้งหมดจะถูกอ่านเป็นสตริง หากเราไม่ตั้งค่า inferSchema ให้เป็นจริง

อ่าน: Python Libraries สำหรับการเรียนรู้ของเครื่อง

การจัดการ DataFrame

ตอนนี้เราจะมาดูวิธีจัดการ Data Frame:

  • รู้จักประเภทข้อมูลของคอลัมน์

printSchema จะใช้เพื่อดูประเภทคอลัมน์และประเภทข้อมูล ตอนนี้สคีมาจะถูกพิมพ์ในรูปแบบทรีโดยใช้ printSchema()

รถไฟ.printSchema()

เอาท์พุท:

ราก

|– User_ID: จำนวนเต็ม (nullable = true)

|– Product_ID: สตริง (nullable = true)

|– เพศ: สตริง (nullable = true)

|– อายุ: สตริง (nullable = true)

|– อาชีพ: จำนวนเต็ม (nullable = true)

|– City_Category: สตริง (nullable = true)

|– Stay_In_Current_City_Years: สตริง (nullable = true)

|– Marital_Status: จำนวนเต็ม (nullable = true)

|– Product_Category_1: จำนวนเต็ม (nullable = true)

|– Product_Category_2: จำนวนเต็ม (nullable = true)

|– Product_Category_3: จำนวนเต็ม (nullable = true)

|– ซื้อ: จำนวนเต็ม (nullable = true)

หลังจากอ่านไฟล์ csv แล้ว เราจะเห็นได้ว่าเราได้รับชนิดของข้อมูลหรือสคีมาของแต่ละคอลัมน์ใน data frame อย่างแม่นยำ

  • กำลังแสดงการสังเกตครั้งแรก

หากต้องการดูการสังเกต n ครั้งแรก เราสามารถใช้การบังคับศีรษะได้ การทำงานของหัวของ Pandas เหมือนกับการทำงานของส่วนหัวของ PySpark

รถไฟหัว(5)

เอาท์พุท:

[Row(User_ID=1000001, Product_ID=u'P00069042′, Gender=u'F', Age=u'0-17′, Occupation=10, City_Category=u'A', Stay_In_Current_City_Years=u'2′, Marital_Status= 0, Product_Category_1=3, Product_Category_2=ไม่มี, Product_Category_3=ไม่มี, การซื้อ=8370),

แถว (User_ID=1000001, Product_ID=u'P00248942′, เพศ=u'F', อายุ=u'0-17′, อาชีพ=10, City_Category=u'A', Stay_In_Current_City_Years=u'2′, Marital_Status=0 , Product_Category_1=1, Product_Category_2=6, Product_Category_3=14, การซื้อ=15200),

แถว (User_ID=1000001, Product_ID=u'P00087842′, เพศ=u'F', อายุ=u'0-17′, อาชีพ=10, City_Category=u'A', Stay_In_Current_City_Years=u'2′, Marital_Status=0 , Product_Category_1=12, Product_Category_2=ไม่มี, Product_Category_3=ไม่มี, การซื้อ=1422),

แถว (User_ID=1000001, Product_ID=u'P00085442′, เพศ=u'F', อายุ=u'0-17′, อาชีพ=10, City_Category=u'A', Stay_In_Current_City_Years=u'2′, Marital_Status=0 , Product_Category_1=12, Product_Category_2=14, Product_Category_3=ไม่มี, การซื้อ=1057),

แถว (User_ID=1000002, Product_ID=u'P00285442′, เพศ=u'M', อายุ=u'55+', อาชีพ=16, City_Category=u'C', Stay_In_Current_City_Years=u'4+', Marital_Status=0 , Product_Category_1=8, Product_Category_2=ไม่มี, Product_Category_3=ไม่มี, การซื้อ=7969)]

ตอนนี้เราจะใช้การดำเนินการแสดงเพื่อดูผลลัพธ์ในลักษณะที่ดีขึ้นเพราะผลลัพธ์จะมาในรูปแบบของแถว นอกจากนี้เรายังสามารถตัดทอนผลลัพธ์โดยใช้อาร์กิวเมนต์ truncate = True

train.show(2,truncate= True)

เอาท์พุท:

+——-+———-+——+—-+———-+————-+————–+————–+——+ ——+——+——–+

|User_ID|Product_ID|เพศ| อายุ|อาชีพ|เมือง_หมวดหมู่|อยู่_ปัจจุบัน_เมือง_ปี|สถานะการสมรส|ผลิตภัณฑ์_หมวดหมู่_1|ผลิตภัณฑ์_หมวดหมู่_2|ผลิตภัณฑ์_หมวดหมู่_3|การซื้อ|

+——-+———-+——+—-+———-+————-+————–+————–+——+ ——+——+——–+

|1000001| P00069042| ฉ|0-17| 10| A| 2| 0| 3| null| null| 8370|

|1000001| P00248942| ฉ|0-17| 10| A| 2| 0| 1| 6| 14| 15200|

+——-+———-+——+—-+———-+————-+————–+————–+——+ ——+——+——–+

แสดงเฉพาะ 2 แถวบนสุด

  • การนับจำนวนแถวของ DataFrame

ในการนับจำนวนแถวใน data frame เราสามารถใช้การดำเนินการนับได้ ตอนนี้เราจะนับจำนวนแถวของไฟล์ทดสอบและไฟล์ฝึกโดยใช้การดำเนินการนับ

train.count(),test.count()

เอาท์พุท:

(233598, 550069)

เรามี 233598, 550069 แถวในการทดสอบ & รถไฟ ตามลำดับ

  • รับจำนวนคอลัมน์และชื่อคอลัมน์จากไฟล์ทดสอบและฝึก

คล้ายกับการทำงานของคอลัมน์ใน DataFrame ของแพนด้า เราจะใช้การดำเนินการของคอลัมน์เพื่อรับชื่อของคอลัมน์ ตอนนี้ก่อนอื่นเราจะพิมพ์หมายเลข ของคอลัมน์และชื่อคอลัมน์จากไฟล์ทดสอบและไฟล์ฝึก

len(train.columns), train.columns

เอาท์พุท:

12 ['User_ID', 'Product_ID', 'Gender', 'Age', 'Occupation', 'City_Category', 'Stay_In_Current_City_Years', 'Marital_Status', 'Product_Category_1', 'Product_Category_Category_2', 'Petory'

ตอนนี้เรากำลังดำเนินการกับไฟล์ทดสอบในลักษณะเดียวกัน

len(test.columns), test.columns

เอาท์พุท:

13 [”, 'User_ID', 'Product_ID', 'Gender', 'Age', 'Occupation', 'City_Category', 'Stay_In_Current_City_Years', 'Marital_Status', 'Product_Category_1', 'Product_Category_2' ']

หลังจากผลลัพธ์ข้างต้น จะพบว่ามี 12 คอลัมน์ในไฟล์การฝึกอบรม และ 13 คอลัมน์ในไฟล์ทดสอบ จากผลลัพธ์ข้างต้น เราสามารถตรวจสอบว่าเรามี 13 คอลัมน์ในไฟล์ทดสอบและ 12 คอลัมน์ในไฟล์การฝึกอบรม คอลัมน์ "หวี" เป็นคอลัมน์เดียวในไฟล์ทดสอบ และไม่มี "การซื้อ" ไม่ปรากฏในไฟล์ทดสอบ มีอีกหนึ่งคอลัมน์ในไฟล์ทดสอบที่เราเห็นว่าไม่มีชื่อคอลัมน์ใดๆ

  • รับสถิติสรุป เช่น จำนวน สูงสุด ต่ำสุด ค่าเบี่ยงเบนมาตรฐาน ค่าเฉลี่ยในคอลัมน์ตัวเลขของ DataFrame

ใน DataFrame เราจะใช้การดำเนินการที่เรียกว่าอธิบายการดำเนินการ เราสามารถคำนวณคอลัมน์ตัวเลขและรับข้อมูลสรุปทางสถิติโดยใช้คำอธิบายการดำเนินการ คอลัมน์ตัวเลขทั้งหมดจะถูกคำนวณใน DataFrame เราไม่มีชื่อคอลัมน์ที่ระบุในการคำนวณสถิติสรุป

train.describe().show()

เอาท์พุท:

+——-+——+—–+——-+——+——+——+—— ————+

|สรุป| User_ID| อาชีพ| Marital_Status|ผลิตภัณฑ์_Category_1|Product_Category_2|Product_Category_3| ซื้อ|

+——-+——+—–+——-+——+——+——+—— ————+

| นับ| 550068| 550068| 550068| 550068| 376430| 166821| 550068|

| ค่าเฉลี่ย|1003028.8424013031|8.076706879876669|0.40965298835780306| 5.404270017525106| 9.842329251122386|12.668243206790512| 9263.968712959126|

| stddev|1727.5915855308265|6.522660487341778| 0.4917701263173273|3.9362113692014082| 5.086589648693526| 4.125337631575267|5023.0653938206015|

| นาที| 1000001| 0| 0| 1| 2| 3| 12|

| สูงสุด| 1006040| 20| 1| 20| 18| 18| 23961|

+——-+——+—–+——-+——+——+——+—— ————+

ในการอธิบายการดำเนินการ นี่คือสิ่งที่เราได้รับเมื่อมีการระบุชื่อคอลัมน์สตริงหรือชื่อคอลัมน์ตามหมวดหมู่

train.describe('Product_ID').show()

เอาท์พุท:

+——-+———-+

|สรุป|Product_ID|

+——-+———-+

| นับ| 550068|

| หมายถึง| null|

| stddev| null|

| นาที| P00000142|

| สูงสุด| P0099942|

+——-+———-+

ตาม ASCII ค่าสูงสุดและต่ำสุดของการคำนวณ การดำเนินการอธิบายใช้เพื่อทำงานในคอลัมน์ประเภทสตริง

  • การเลือกคอลัมน์ของ DataFrame

เราจะใช้ชื่อของคอลัมน์ในการดำเนินการเลือกเพื่อเลือกคอลัมน์ เราจะพูดถึงชื่อของคอลัมน์ที่มีการแยกโดยใช้ลูกน้ำ ตอนนี้เราจะมาดูกันว่าการเลือก "อายุ" และ "User_ID" จากไฟล์การฝึกอบรมทำอย่างไร

  • train.select('User_ID','Age').show(5)
  • เอาท์พุท:
  • +——-+—-+
  • |User_ID| อายุ|
  • +——-+—-+
  • |1000001|0-17|
  • |1000001|0-17|
  • |1000001|0-17|
  • |1000001|0-17|
  • |1000002| 55+|
  • +——-+—-+
  • ค้นหาหมายเลขผลิตภัณฑ์ที่แตกต่าง ในไฟล์ทดสอบและไฟล์ฝึก

เพื่อคำนวณหมายเลขของ DataFrame ของแถวที่แตกต่างกัน เราจะใช้การ ดำเนินการ ที่ แตกต่างกัน ตอนนี้ เราจะใช้ การดำเนินการ เฉพาะ สำหรับการคำนวณจำนวน ของผลิตภัณฑ์ที่แตกต่างกันในไฟล์ทดสอบและฝึกอบรม

train.select('Product_ID').distinct().count(),test.select('Product_ID').distinct().count()

เอาท์พุท:

(3633, 3492)

เรามีผลิตภัณฑ์ที่แตกต่างกัน 3492 & 3633 ในไฟล์ทดสอบและฝึกอบรม ตามลำดับ ตอนนี้เรารู้แล้วว่าในไฟล์การฝึกอบรม เรามีค่าที่แตกต่างจากไฟล์ทดสอบ เนื่องจากเราสามารถเรียนรู้จากผลลัพธ์ที่ได้ ตอนนี้ เราจะใช้การลบเพื่อค้นหาหมวดหมู่ Product_ID ที่ไม่มีอยู่ในไฟล์การฝึก แต่มีอยู่ในไฟล์ทดสอบ สิ่งเดียวกันที่สามารถทำได้สำหรับคุณลักษณะทั้งหมดของหมวดหมู่

diff_cat_in_train_test=test.select('Product_ID').subtract(train.select('Product_ID'))

diff_cat_in_train_test.distinct().count()# สำหรับการนับที่แตกต่างกัน

เอาท์พุท:

46

จากผลลัพธ์ข้างต้น เราสามารถทราบได้ว่ามี 47 หมวดหมู่ต่างๆ ซึ่งไม่มีอยู่ในไฟล์การฝึกอบรม แต่มีอยู่ในไฟล์ทดสอบ ข้อมูลจะถูกข้ามหรือเก็บรวบรวมจากไฟล์ทดสอบซึ่งไม่มีอยู่ในไฟล์ของรถไฟ

  • การคำนวณความถี่คู่ของคอลัมน์หมวดหมู่?

ให้เราทำการคำนวณความถี่คู่ของคอลัมน์ใน DataFrame โดยใช้การดำเนินการสามารถดำเนินการข้ามแท็บ ตอนนี้ให้เราคำนวณคอลัมน์ "เพศ" และ "อายุ" ใน DataFrame ของรถไฟโดยใช้ การดำเนินการ แบบแท็บไขว้

train.crosstab('อายุ', 'เพศ').show()

เอาท์พุท:

+———-+—–+——+

|อายุ_เพศ| F| ม|

+———-+—–+——+

| 0-17| 5083| 10019|

| 46-50|13199| 32502|

| 18-25|24628| 75032|

| 36-45|27170| 82843|

| 55+| 5083| 16421|

| 51-55| 9894| 28607|

| 26-35|50752|168835|

+———-+—–+——+

ค่าที่แตกต่างกันของเพศคือชื่อคอลัมน์ และจำนวนอายุที่แตกต่างกันคือชื่อแถว ซึ่งสามารถเห็นได้ในผลลัพธ์ด้านบน ในตาราง จำนวนคู่จะเป็นศูนย์หากไม่เกิดขึ้น

วิธีรับ DataFrame ด้วยแถวที่ไม่ซ้ำ

ในการค้นหาแถวที่ไม่ซ้ำและไม่รวมแถวที่ซ้ำกัน เราจะใช้ การดำเนินการ dropDuplicates จะได้รับ Dataframe โดยไม่มีแถวที่ซ้ำกันโดยการวางแถวที่ซ้ำกันของ DataFrame โปรดตรวจสอบที่นี่เพื่อทราบว่าขั้นตอน dropDuplicates ดำเนินการอย่างไรเพื่อให้ได้แถวที่ไม่ซ้ำทั้งหมดสำหรับคอลัมน์

train.select('อายุ' 'เพศ').dropDuplicates().show()

เอาท์พุท:

+—–+——+

| อายุ|เพศ|

+—–+——+

|51-55| F|

|51-55| ม|

|26-35| F|

|26-35| ม|

|36-45| F|

|36-45| ม|

|46-50| F|

|46-50| ม|

| 55+| F|

| 55+| ม|

|18-25| F|

| 0-17| F|

|18-25| ม|

| 0-17| ม|

+—–+——+

  • วิธีการวางแถวจะเป็นโมฆะค่า?

หากใครต้องการทิ้งแถวทั้งหมดที่มีค่าว่าง เราก็สามารถใช้การดำเนินการที่เรียกว่าการ ดำเนินการ dropna ได้ ในการวางแถวจาก DataFrame จะพิจารณาสามตัวเลือก

  • เซ็ตย่อย – เป็นรายชื่อทั้งหมดของคอลัมน์ที่จะพิจารณาสำหรับการดำเนินการวางคอลัมน์ที่มีค่าว่าง
  • Thresh – ช่วยในการวางแถวที่มีค่าน้อยกว่า thresh ที่ไม่ใช่ค่าว่าง โดยค่าเริ่มต้น ไม่มีอะไรระบุไว้ในนี้
  • How – สามารถใช้ได้ในสองประเภท – ทั้งหมดหรือใดๆ เมื่อใช้ค่าใด ๆ ค่าใด ๆ จะเป็นการลบแถวหากค่าใด ๆ ในแถวเป็นค่าว่าง การใช้ all จะลดแถวลงหากค่าของแถวทั้งหมดเป็นค่าว่าง

ตอนนี้ เราจะใช้ตัวเลือกเหล่านี้ทีละตัวเพื่อวางแถวที่เป็นโมฆะโดยใช้ตัวเลือกเริ่มต้น เช่น เซ็ตย่อย thresh ไม่มี สำหรับวิธีการ ไม่มี ใดๆ

train.dropna().นับ()

เอาท์พุท:

166821

  • จะเติมค่า Null ของ DataFrame ด้วยค่าคงที่ได้อย่างไร?

เพื่อเติมค่าว่างด้วยหมายเลขคงที่ เราจะใช้ การดำเนินการ fillna ที่นี่ มีสองพารามิเตอร์ที่จะต้องพิจารณาโดย การ ดำเนินการเติมเพื่อเติมค่าว่าง

  • เซ็ตย่อย: ในที่นี้ เราต้องระบุคอลัมน์ที่จะพิจารณาสำหรับการเติมค่า
  • ค่า: ในที่นี้ เราสามารถพูดถึงจำนวนเงินที่จะแทนที่ด้วยค่าใด ซึ่งสามารถเป็นประเภทข้อมูลใดก็ได้ เช่น สตริง ทุ่น หรือ int ในทุกคอลัมน์

เราจะเติม '-1' แทนค่า Null ใน DataFrame ของเทรน

train.fillna(-1).show(2)

เอาท์พุท:

+——-+———-+——+—-+———-+————-+————–+————–+——+ ——+——+——–+

|User_ID|Product_ID|เพศ| อายุ|อาชีพ|เมือง_หมวดหมู่|อยู่_ปัจจุบัน_เมือง_ปี|สถานะการสมรส|ผลิตภัณฑ์_หมวดหมู่_1|ผลิตภัณฑ์_หมวดหมู่_2|ผลิตภัณฑ์_หมวดหมู่_3|การซื้อ|

+——-+———-+——+—-+———-+————-+————–+————–+——+ ——+——+——–+

|1000001| P00069042| ฉ|0-17| 10| A| 2| 0| 3| -1| -1| 8370|

|1000001| P00248942| ฉ|0-17| 10| A| 2| 0| 1| 6| 14| 15200|

+——-+———-+——+—-+———-+————-+————–+————–+——+ ——+——+——–+

แสดงเฉพาะ 2 แถวบนสุด

บทสรุป

PySpark กำลังได้รับแรงผลักดันในโลกของปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง PySpark ใช้เพื่อแก้ปัญหาการเรียนรู้ของเครื่องในโลกแห่งความเป็นจริง คุณสามารถสร้าง RDD จากแหล่งข้อมูลต่างๆ ทั้งภายนอกและที่มีอยู่ และทำการแปลงทุกประเภทในนั้น หวังว่าบทความนี้จะมีข้อมูลและสามารถให้ข้อมูลเชิงลึกเกี่ยวกับ PySpark dataframes แก่คุณได้

หากคุณอยากเรียนรู้เกี่ยวกับ PySpark และเครื่องมือวิทยาศาสตร์ข้อมูลอื่นๆ ลองดูประกาศนียบัตร PG ด้านวิทยาศาสตร์ข้อมูลของ IIIT-B และ upGrad ซึ่งสร้างขึ้นสำหรับมืออาชีพที่ทำงานและเสนอกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติ การให้คำปรึกษากับ ผู้เชี่ยวชาญในอุตสาหกรรม ตัวต่อตัวกับที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

PySpark มีประสิทธิภาพมากกว่า Pandas หรือไม่

ใช่ PySpark เร็วกว่า Pandas และทำได้ดีกว่า Pandas ในการทดสอบการเปรียบเทียบ ในแง่พื้นฐาน Pandas ดำเนินการในเครื่องเดียว ในขณะที่ PySpark ดำเนินการในหลายเครื่อง หากคุณกำลังทำงานกับแอปพลิเคชัน Machine Learning ที่มีชุดข้อมูลขนาดใหญ่ PySpark เป็นตัวเลือกที่เหมาะสมที่สุด เนื่องจากสามารถดำเนินการได้เร็วกว่า Pandas ถึง 100 เท่า เนื่องจาก JVM ภาษาโปรแกรม Scala จึงเร็วกว่า Python ถึง 10 เท่าสำหรับการวิเคราะห์และประมวลผลข้อมูล เมื่อใช้โค้ดโปรแกรม Python เพื่อโทรไปยังไลบรารี Spark ผลลัพธ์จะปานกลาง

ข้อเสียของการใช้ Apache PySpark คืออะไร?

Spark ไม่มีระบบจัดการไฟล์ของตัวเอง เนื่องจากต้องใช้หน่วยความจำเสริมที่มีต้นทุนสูงในการใช้งาน Spark การประมวลผลในหน่วยความจำจึงอาจมีราคาสูง เมื่อใช้ Apache Spark กับ Hadoop นักพัฒนาจะประสบปัญหากับไฟล์ขนาดกะทัดรัด ข้อมูลจะวนซ้ำเป็นชุดๆ ใน Spark โดยแต่ละการวนซ้ำจะถูกวางแผนและประมวลผลอย่างอิสระ ใน Apache Spark ข้อมูลจะถูกแบ่งออกเป็นกลุ่มย่อยตามช่วงเวลาที่กำหนดไว้ล่วงหน้า ดังนั้น Apache จะไม่รองรับเกณฑ์หน้าต่างตามเรกคอร์ด แต่จะให้เกณฑ์กรอบเวลาตามเวลาแทน

ชุดข้อมูล DataFrame และ RDD แตกต่างกันอย่างไร

RDD เป็นกลุ่มของรายการข้อมูลที่กระจัดกระจายไปยังคอมพิวเตอร์หลายเครื่อง ข้อมูลแสดงผ่าน RDD ซึ่งเป็นชุดของอ็อบเจ็กต์ Java หรือ Scala DataFrame คือชุดของข้อมูลที่มีโครงสร้างเป็นคอลัมน์ที่มีชื่อซึ่งกระจายอยู่ในเซิร์ฟเวอร์จำนวนมาก ในฐานข้อมูลเชิงสัมพันธ์ จะเทียบเท่ากับตารางในเชิงแนวคิด ชุดข้อมูลคือส่วนขยาย dataframe API ที่มีความสามารถอินเทอร์เฟซการเขียนโปรแกรมเชิงวัตถุที่ปลอดภัยของ RDD API DataFrame คือชุดข้อมูลแบบกระจาย คล้ายกับ RDD และไม่สามารถเปลี่ยนแปลงได้ ข้อมูลมีโครงสร้างเป็นคอลัมน์ที่มีชื่อ คล้ายกับตารางในฐานข้อมูลเชิงสัมพันธ์ แทนที่จะเป็น RDD เมื่อพูดถึงงานง่ายๆ เช่น การจัดกลุ่มข้อมูล RDD จะช้ากว่าทั้ง Dataframes และ Datasets มี API แบบง่ายสำหรับการทำงานแบบรวม สามารถรวบรวมข้อมูลได้เร็วกว่า RDD และชุดข้อมูล