全部产品
Search
文档中心

E-MapReduce:Operasi dasar pada Spark shell dan RDD

更新时间:Nov 10, 2025

Topik ini menjelaskan operasi dasar pada Spark shell dan dataset terdistribusi yang tangguh (RDD).

Memulai Spark Shell

Spark shell adalah alat yang kuat untuk analisis data interaktif serta menyediakan cara sederhana untuk mempelajari API. Spark shell mendukung Scala dan Python.

Untuk memulai Spark shell, ikuti langkah-langkah berikut:

  1. Login ke node master kluster melalui SSH. Untuk informasi selengkapnya, lihat Login ke kluster.

  2. Jalankan perintah berikut untuk memulai Spark shell:

    spark-shell

    Di Spark shell, SparkContext telah dibuat secara otomatis dalam variabel bernama sc. SparkContext yang dibuat secara manual tidak berlaku. Anda dapat menggunakan parameter --master untuk menentukan node master tempat SparkContext terhubung dan parameter --jars untuk menentukan paket JAR yang ditambahkan ke classpath. Pisahkan beberapa paket JAR dengan koma (,). Untuk informasi selengkapnya mengenai parameter tersebut, jalankan perintah spark-shell --help.

Operasi RDD Dasar

Spark menyediakan RDD. RDD adalah kumpulan elemen yang dapat dioperasikan secara paralel. Anda dapat membuat RDD menggunakan koleksi yang diparalelkan atau dataset eksternal seperti sistem file bersama, Hadoop Distributed File System (HDFS), HBase, atau dataset eksternal lainnya yang menyediakan Hadoop InputFormat.

Kode contoh:

  • Buat RDD menggunakan koleksi terparalelisasi

    val data = Array(1, 2, 3, 4, 5)
    val distData = sc.parallelize(data)
  • Buat RDD menggunakan dataset eksternal

    val distFile = sc.textFile("data.txt")

Operasi RDD terbagi menjadi dua jenis: transformasi dan aksi. Transformasi tidak dieksekusi secara langsung, sedangkan aksi memicu eksekusi.

  • Transformasi

    Operasi

    Deskripsi

    map()

    Menerapkan fungsi ke setiap elemen RDD dan mengembalikan hasilnya sebagai RDD baru.

    flatMap()

    Menerapkan fungsi ke setiap elemen RDD, meratakan RDD, lalu mengembalikan hasilnya sebagai RDD baru.

    filter()

    Memilih elemen-elemen RDD yang menghasilkan nilai true dari suatu fungsi, dan mengembalikan hasilnya sebagai RDD baru.

    distinct()

    Mengembalikan elemen unik dari RDD tanpa menggunakan fungsi.

    union()

    Menggabungkan elemen-elemen dari dua RDD dan mengembalikan hasilnya sebagai RDD baru.

    intersection()

    Mengembalikan elemen yang muncul di kedua RDD.

    subtract()

    Menghapus elemen yang muncul di kedua RDD.

    cartesian()

    Menghasilkan Produk Kartesius dari dua RDD.

  • Aksi

    Operasi

    Deskripsi

    collect()

    Mengembalikan semua elemen RDD.

    count()

    Mengembalikan jumlah elemen RDD.

    countByValue()

    Mengembalikan jumlah kemunculan setiap elemen dalam RDD.

    reduce()

    Mengagregasi semua elemen dalam RDD, misalnya menghitung jumlah total.

    fold(0)(func)

    Mirip dengan reduce(), tetapi menggunakan nilai nol sebagai nilai awal.

    aggregate(0)(seqOp,combop)

    Mirip dengan reduce(), tetapi tipe data RDD yang dikembalikan berbeda dari RDD aslinya.

    foreach(func)

    Menerapkan fungsi tertentu ke setiap elemen RDD.

Mulai menggunakan contoh Spark shell example

Pertama, RDD dibuat dengan membaca file teks dari sistem penyimpanan eksternal. Operator map digunakan untuk menghitung panjang setiap baris dalam file teks, sedangkan operator reduce digunakan untuk menjumlahkan panjang tersebut. Dengan demikian, Anda dapat memperoleh panjang total semua baris dalam file teks.

  1. Login ke node master kluster melalui SSH. Untuk informasi selengkapnya, lihat Login ke kluster.

  2. Buat file data.txt dan unggah ke HDFS.

    Konten file data.txt dalam contoh ini ditunjukkan di bawah ini.

    Hello Spark
    This is a test file
    1234567890

    Anda dapat mengunggah data.txt ke HDFS menggunakan perintah berikut.

    hadoop fs -put data.txt /user/root/
  3. Mulai Spark shell.

    spark-shell
  4. Jalankan perintah berikut untuk menghitung panjang total karakter semua baris dalam file data.txt.

    val lines = sc.textFile("data.txt")
    val lineLengths = lines.map(s => s.length)
    val totalLength = lineLengths.reduce((a, b) => a + b)