Bekerja dengan Pair RDD di PySpark

Fundamental Big Data dengan PySpark

Upendra Devisetty

Science Analyst, CyVerse

Pengantar pair RDD di PySpark

  • Dataset nyata biasanya berupa pasangan kunci/nilai

  • Tiap baris adalah kunci yang memetakan ke satu atau lebih nilai

  • Pair RDD adalah struktur data khusus untuk dataset seperti ini

  • Pair RDD: Kunci adalah identifikasi, nilai adalah datanya

Fundamental Big Data dengan PySpark

Membuat pair RDD

  • Dua cara umum membuat pair RDD

    • Dari list tuple kunci-nilai
    • Dari RDD biasa
  • Ubah data ke bentuk kunci/nilai untuk paired RDD

my_tuple = [('Sam', 23), ('Mary', 34), ('Peter', 25)]
pairRDD_tuple = sc.parallelize(my_tuple)
my_list = ['Sam 23', 'Mary 34', 'Peter 25']
regularRDD = sc.parallelize(my_list)
pairRDD_RDD = regularRDD.map(lambda s: (s.split(' ')[0], s.split(' ')[1]))
Fundamental Big Data dengan PySpark

Transformasi pada pair RDD

  • Semua transformasi RDD biasa berlaku pada pair RDD

  • Harus memberi fungsi yang bekerja pada pasangan kunci-nilai, bukan elemen tunggal

  • Contoh transformasi pada paired RDD

    • reduceByKey(func): Menggabungkan nilai dengan kunci yang sama

    • groupByKey(): Mengelompokkan nilai dengan kunci yang sama

    • sortByKey(): Mengembalikan RDD terurut berdasarkan kunci

    • join(): Menggabungkan dua pair RDD berdasarkan kunci

Fundamental Big Data dengan PySpark

Transformasi reduceByKey()

  • Transformasi reduceByKey() menggabungkan nilai dengan kunci yang sama

  • Menjalankan operasi paralel untuk tiap kunci dalam dataset

  • Ini adalah transformasi, bukan aksi

regularRDD = sc.parallelize([("Messi", 23), ("Ronaldo", 34), 
                             ("Neymar", 22), ("Messi", 24)])
pairRDD_reducebykey = regularRDD.reduceByKey(lambda x,y : x + y)
pairRDD_reducebykey.collect()

[('Neymar', 22), ('Ronaldo', 34), ('Messi', 47)]
Fundamental Big Data dengan PySpark

Transformasi sortByKey()

  • Operasi sortByKey() mengurutkan pair RDD berdasarkan kunci

  • Mengembalikan RDD yang diurutkan naik atau turun

pairRDD_reducebykey_rev = pairRDD_reducebykey.map(lambda x: (x[1], x[0]))
pairRDD_reducebykey_rev.sortByKey(ascending=False).collect()

[(47, 'Messi'), (34, 'Ronaldo'), (22, 'Neymar')]
Fundamental Big Data dengan PySpark

Transformasi groupByKey()

  • groupByKey() mengelompokkan semua nilai dengan kunci yang sama dalam pair RDD
airports = [("US", "JFK"),("UK", "LHR"),("FR", "CDG"),("US", "SFO")]
regularRDD = sc.parallelize(airports)
pairRDD_group = regularRDD.groupByKey().collect()
for cont, air in pairRDD_group:
  print(cont, list(air))

FR ['CDG'] US ['JFK', 'SFO'] UK ['LHR']
Fundamental Big Data dengan PySpark

Transformasi join()

  • Transformasi join() menggabungkan dua pair RDD berdasarkan kuncinya
RDD1 = sc.parallelize([("Messi", 34),("Ronaldo", 32),("Neymar", 24)])
RDD2 = sc.parallelize([("Ronaldo", 80),("Neymar", 120),("Messi", 100)])
RDD1.join(RDD2).collect()

[('Neymar', (24, 120)), ('Ronaldo', (32, 80)), ('Messi', (34, 100))]
Fundamental Big Data dengan PySpark

Ayo berlatih!

Fundamental Big Data dengan PySpark

Preparing Video For Download...