Kursus
Apache Spark adalah mesin analitik terpadu untuk rekayasa data, ilmu data, dan pembelajaran mesin dalam skala besar. Spark dapat digunakan dengan Python, SQL, R, Java, atau Scala. Spark awalnya dimulai di University of California, Berkeley, pada tahun 2009 dan kemudian disumbangkan ke Apache Software Foundation pada tahun 2013. Kini Spark adalah “mesin komputasi skala besar yang paling banyak digunakan,” dengan ribuan lowongan pekerjaan yang memanfaatkan teknologi ini. Karena menjadi keterampilan yang sangat bernilai di dunia rekayasa data, berikut pertanyaan wawancara untuk membantu pencarian kerja Anda atau pencarian talenta yang berpengalaman dengan Spark. Jawaban pengodean akan diberikan dalam Python.
Pertanyaan Wawancara Spark Dasar
Pertanyaan-pertanyaan ini membahas beberapa dasar Spark dan cocok untuk mereka yang baru memiliki pengalaman dasar menggunakannya. Jika Anda butuh penyegaran, kursus Introduction to Spark SQL in Python kami adalah tempat yang ideal untuk memulai.
1. Apa itu Apache Spark, dan mengapa digunakan dalam pemrosesan data?
Pertanyaan ini menilai pemahaman umum kandidat tentang Apache Spark dan perannya dalam ekosistem big data.
Jawaban:
Apache Spark adalah sistem komputasi terdistribusi open-source yang menyediakan antarmuka untuk memrogram seluruh klaster dengan paralelisme data implisit dan toleransi kesalahan. Spark digunakan untuk pemrosesan data berskala besar karena kecepatan dan kemudahan penggunaannya dibandingkan MapReduce tradisional.
Fitur Utama:
- Komputasi In-Memory: Menyimpan data di memori untuk pemrosesan yang lebih cepat.
- Skalabilitas: Dapat menangani data hingga petabita dengan menggunakan klaster mesin.
- Kemudahan Penggunaan: Menyediakan API dalam Java, Scala, Python, dan R.
- Mesin Analitik Terpadu: Mendukung SQL, data streaming, pembelajaran mesin, dan pemrosesan graf.
2. Jelaskan konsep Resilient Distributed Datasets (RDD)
Pertanyaan ini menguji Anda pada konsep fundamental Apache Spark. Pastikan Anda memahami salah satu komponen kritis yang membuat Spark begitu kuat.
Resilient Distributed Datasets (RDD) adalah blok bangunan fundamental Apache Spark. RDD merepresentasikan koleksi objek yang tidak dapat diubah (immutable) dan terdistribusi yang dapat dioperasikan secara paralel di seluruh klaster. Berikut penjelasan karakteristik dan konsep kunci yang terkait dengan RDD:
- Immutable: RDD bersifat immutable, artinya setelah dibuat, isinya tidak dapat diubah. Anda hanya dapat mentransformasi RDD dengan menerapkan transformasi untuk membuat RDD baru. Immutability ini menyederhanakan toleransi kesalahan dan memungkinkan model evaluasi malas (lazy evaluation) Spark.
- Terdistribusi: RDD didistribusikan di beberapa node dalam klaster, memungkinkan Spark melakukan operasi paralel. Setiap RDD dibagi menjadi beberapa partisi, dan partisi-partisi ini dapat diproses secara independen pada node yang berbeda.
- Resilient: "Resilient" pada RDD mengacu pada toleransi kesalahan. Spark memastikan resiliensi dengan melacak lineage (silsilah) setiap RDD. Jika sebuah partisi RDD hilang karena kegagalan node, Spark dapat menghitung ulang partisi tersebut menggunakan informasi lineage dan transformasi yang diterapkan pada data asli.
- Dataset: RDD adalah representasi data terdistribusi, yang berarti RDD dapat menampung tipe data apa pun, termasuk data terstruktur atau tidak terstruktur. Spark menyediakan API dalam berbagai bahasa (seperti Scala, Java, Python, dan R) untuk bekerja dengan RDD, sehingga serbaguna untuk berbagai kasus penggunaan dan tipe data.
- Evaluasi Malas (Lazy Evaluation): RDD mendukung lazy evaluation, artinya transformasi pada RDD tidak langsung dieksekusi saat dipanggil. Sebaliknya, Spark membangun directed acyclic graph (DAG) transformasi yang mendefinisikan komputasi tetapi menunda eksekusi hingga sebuah action dipicu. Optimalisasi ini memungkinkan Spark mengoptimalkan rencana eksekusi dan meningkatkan performa.
3. Apa itu YARN?
YARN adalah manajer kontainer terdistribusi yang mengelola sumber daya di Hadoop. Spark dapat memanfaatkan YARN saat berjalan di klaster Hadoop untuk manajemen sumber daya yang lebih efektif dan efisien. Salah satu komponen kritis YARN adalah kemampuannya untuk mengalokasikan sumber daya secara efisien di seluruh klaster, menjadwalkan job secara efisien, dan toleran terhadap kegagalan ketika terjadi kegagalan node. Ini adalah salah satu dari banyak komponen yang membuat Spark menjadi alat yang kuat.
4. Apa perbedaan antara transformasi map dan flatMap pada RDD Spark?
Pertanyaan ini membantu menentukan apakah Anda memahami berbagai jenis transformasi pada RDD (Resilient Distributed Datasets) Spark.
Jawaban:
.map(): Mentransformasi setiap elemen RDD menjadi tepat satu elemen baru. Hasilnya adalah RDD dengan jumlah elemen yang sama seperti RDD masukan..flatMap(): Mentransformasi setiap elemen RDD menjadi nol atau lebih elemen baru. Hasilnya adalah RDD dengan jumlah elemen yang berpotensi berbeda dari RDD masukan.
# Example of map
rdd = spark.sparkContext.parallelize([1, 2, 3])
mapped_rdd = rdd.map(lambda x: x * 2)
print(mapped_rdd.collect()) # Output: [2, 4, 6]
# Example of flatMap
flat_mapped_rdd = rdd.flatMap(lambda x: [x, x * 2])
print(flat_mapped_rdd.collect()) # Output: [1, 2, 2, 4, 3, 6]
Kode ini menggambarkan perbedaan antara map dan flatMap dengan mentransformasi RDD bilangan bulat.
5. Bagaimana Anda menggunakan Spark SQL untuk men-query data dari sebuah DataFrame?
Pertanyaan ini memeriksa kemampuan kandidat menggunakan Spark SQL untuk men-query data, yang penting untuk tugas analisis data.
Jawaban:
# Register the DataFrame as a SQL temporary view
df.createOrReplaceTempView("table")
# Execute SQL query
result = spark.sql("SELECT column1, SUM(column2) FROM table GROUP BY column1")
# Show the results
result.show()
Cuplikan ini menunjukkan pembuatan tampilan sementara dari DataFrame dan penggunaan Spark SQL untuk melakukan query group-by.
Pertanyaan Wawancara Spark Tingkat Menengah
Bagi mereka yang telah menguasai dasar-dasar dan menerapkannya dalam peran profesional, pertanyaan ini mungkin lebih umum:
6. Jelaskan konsep lazy evaluation di Spark dan mengapa itu penting
Pertanyaan ini menilai pemahaman kandidat tentang salah satu prinsip inti Spark, yang sangat penting untuk mengoptimalkan kinerja.
Jawaban:
Lazy evaluation berarti Spark tidak segera mengeksekusi transformasi saat dipanggil. Sebaliknya, Spark membangun rencana eksekusi logis. Transformasi hanya dieksekusi ketika sebuah action (seperti collect atau count) dipanggil, yang memicu komputasi aktual.
Lazy evaluation penting karena dua alasan:
- Memungkinkan Spark mengoptimalkan seluruh alur pemrosesan data sebelum mengeksekusinya, menggabungkan operasi untuk meminimalkan shuffling data.
- Mengurangi jumlah lintasan melalui data, sehingga meningkatkan performa.
7. Bagaimana cara Anda mem-persist data di Spark, dan apa saja level penyimpanan yang tersedia?
Pertanyaan ini memeriksa pengetahuan kandidat tentang persistensi data di Spark, yang penting untuk tuning performa dan algoritme iteratif.
Jawaban:
Data dapat dipersist di Spark menggunakan metode .persist() atau .cache(). .cache() adalah singkatan dari .persist() dengan level penyimpanan default.
Level Penyimpanan:
- MEMORY_ONLY: Menyimpan RDD sebagai objek Java yang telah dideserialisasi di JVM. Jika RDD tidak muat di memori, beberapa partisi tidak akan di-cache.
- MEMORY_AND_DISK: Menyimpan RDD sebagai objek Java yang telah dideserialisasi di memori. Jika RDD tidak muat di memori, partisi disimpan di disk.
- MEMORY_ONLY_SER: Menyimpan RDD sebagai objek Java yang telah diserialisasi di JVM. Ini mengurangi penggunaan memori tetapi meningkatkan overhead CPU untuk serialisasi/deserialisasi.
- MEMORY_AND_DISK_SER: Mirip MEMORY_AND_DISK tetapi menyimpan objek yang diserialisasi.
- DISK_ONLY: Menyimpan partisi RDD hanya di disk.
rdd = spark.sparkContext.parallelize([1, 2, 3, 4, 5])
rdd.persist(storageLevel=StorageLevel.MEMORY_AND_DISK)
8. Bagaimana Anda menangani data yang skewed di Spark?
Pertanyaan ini mengevaluasi pemahaman kandidat tentang data skew dan cara menanganinya, yang krusial untuk memastikan pemrosesan data yang efisien.
Jawaban:
Data skew terjadi ketika beberapa partisi memiliki data jauh lebih banyak dibandingkan yang lain, sehingga menimbulkan bottleneck performa. Strategi untuk menangani data skew meliputi:
- Salting: Menambahkan kunci acak ke data untuk mendistribusikannya lebih merata di seluruh partisi.
- Repartitioning: Meningkatkan jumlah partisi untuk mendistribusikan data lebih merata.
- Broadcast Variables: Menyiarkan dataset kecil ke semua node untuk menghindari shuffling dataset besar.
from pyspark.sql.functions import monotonically_increasing_id, col
# Example of salting
df = df.withColumn("salt", monotonically_increasing_id() % 10)
df = df.withColumn("new_key", col("original_key") + col("salt"))
9. Jelaskan perbedaan antara narrow dan wide transformations di Spark
Pertanyaan ini menguji pemahaman kandidat tentang model eksekusi Spark dan dampak berbagai jenis transformasi terhadap performa.
Jawaban:
- Narrow Transformations: Operasi di mana setiap partisi masukan berkontribusi tepat ke satu partisi keluaran. Contoh termasuk
.map(),.filter(), dan.union(). Umumnya lebih cepat karena tidak memerlukan shuffling data. - Wide Transformations: Operasi di mana setiap partisi masukan berkontribusi ke beberapa partisi keluaran. Contoh termasuk
.groupByKey(),.reduceByKey(), dan.join(). Memerlukan shuffling data melalui jaringan, yang dapat memakan waktu.
# Narrow transformation example
rdd1 = rdd.map(lambda x: x * 2)
# Wide transformation example
rdd2 = rdd.groupByKey()
10. Spark Streaming dalam Pemrosesan Data Real-Time
Spark unggul dalam melakukan streaming data real-time dari sumber seperti Apache Kafka atau Amazon Kinesis karena skalabel dan toleran terhadap kesalahan. Ini dilakukan melalui ekstensi Spark Streaming. Spark berinteraksi dengan sumber data eksternal menggunakan input DStream, yang merepresentasikan aliran data kontinu dari sumber-sumber tersebut.
Spark Streaming memastikan toleransi kesalahan dan konsistensi data melalui teknik seperti checkpointing dan write-ahead logs. Checkpointing secara berkala menyimpan status aplikasi streaming ke penyimpanan tahan lama (mis. HDFS) untuk pemulihan dari kegagalan, sementara write-ahead logs memberikan toleransi kesalahan untuk data yang diterima dari sumber eksternal.
Pertanyaan Wawancara Spark Lanjutan
Pertanyaan ini untuk pengguna yang lebih berpengalaman secara langsung dengan Spark, khususnya pada topik yang lebih canggih. Jika perlu penyegaran, lihat tutorial Spark Machine Learning kami.
11. Bahas bagaimana Spark dapat dimanfaatkan untuk pembelajaran mesin
Pertanyaan ini menguji pemahaman pewawancara tentang lingkungan Spark dan pustaka MLlib.
Pustaka MLlib Spark menyediakan seperangkat alat dan algoritme yang kaya untuk melakukan tugas pembelajaran mesin dalam skala besar. Untuk rekayasa fitur dan prapemrosesan pada dataset berskala besar, MLlib menawarkan sejumlah teknik dan optimalisasi tingkat lanjut:
- Transformasi dan Seleksi Fitur: MLlib menyediakan berbagai teknik transformasi fitur, seperti scaling, normalisasi, binarisasi, dan vektorisasi (mis. one-hot encoding). Selain itu, MLlib menawarkan metode untuk seleksi fitur, termasuk penyaringan berdasarkan korelasi, information gain, atau uji statistik, serta teknik yang lebih lanjut seperti Principal Component Analysis (PCA) untuk reduksi dimensi.
- Penanganan Fitur Kategorikal: MLlib menyertakan alat untuk menangani fitur kategorikal secara efisien, seperti StringIndexer untuk mengonversi variabel kategorikal menjadi representasi numerik dan OneHotEncoder untuk mengonversinya menjadi vektor biner. Transformasi ini dioptimalkan untuk eksekusi paralel di seluruh klaster Spark terdistribusi.
- Pipeline API: Pipeline Spark memungkinkan pengguna merangkai beberapa tahap rekayasa fitur dan pemodelan ke dalam satu alur kerja. Ini memudahkan pembuatan pipeline transformasi fitur yang kompleks sekaligus memastikan konsistensi dan reprodusibilitas di berbagai dataset dan tugas pembelajaran mesin.
- Custom Transformer dan Estimator: MLlib memungkinkan pengguna mendefinisikan transformer dan estimator fitur kustom menggunakan DataFrame API Spark. Ini memungkinkan integrasi teknik rekayasa fitur spesifik domain atau pustaka pihak ketiga ke dalam pipeline ML Spark, memperluas fungsionalitas dan fleksibilitasnya.
12. Jelaskan bagaimana Spark berintegrasi dengan sistem penyimpanan eksternal seperti Apache Hadoop HDFS dan Apache Cassandra. Apa keuntungan memanfaatkan integrasi ini dalam pipeline data berbasis Spark?
Ini menguji apakah pengguna memahami fungsi dasar sistem berbasis Spark dan bagaimana Spark bekerja dengan HDFS dan Apache Cassandra. Penting untuk memahami baik cara mengambil data melalui kode maupun bagaimana data bergerak di seluruh sistem.
- Koneksi Hadoop HDFS: Spark berintegrasi dengan sistem penyimpanan eksternal seperti Apache Hadoop HDFS dan Apache Cassandra melalui konektor atau pustaka yang dirancang khusus untuk masing-masing sistem. Misalnya, integrasi HDFS bersifat native di Spark, memungkinkan Spark membaca dan menulis data langsung dari/ke HDFS menggunakan Hadoop InputFormat dan OutputFormat API.
- Koneksi Apache Cassandra: Keuntungan memanfaatkan integrasi ini termasuk peningkatan performa karena data locality (dalam kasus HDFS), akses dan manipulasi data yang lebih sederhana, serta kompatibilitas dengan infrastruktur data yang ada. Selain itu, Spark dapat memanfaatkan sifat terdistribusi dari sistem penyimpanan ini untuk pemrosesan paralel, memungkinkan pemrosesan data yang skalabel.
13. Jelaskan konsep broadcast variables di Spark
Broadcast variables di Spark adalah variabel hanya-baca yang di-cache dan tersedia untuk semua worker node dalam aplikasi Spark terdistribusi. Variabel ini digunakan untuk mendistribusikan dataset atau nilai besar yang hanya-baca ke worker node secara efisien, sehingga mengurangi overhead jaringan dan meningkatkan kinerja tugas.
Broadcast variables diserialisasi dan dikirim ke setiap worker node hanya sekali, di mana variabel tersebut di-cache di memori dan digunakan kembali di banyak tugas. Ini menghilangkan kebutuhan untuk mengirim variabel dengan setiap tugas, mengurangi overhead transfer data, terutama untuk dataset besar.
- Pemanfaatan: Broadcast variables umum digunakan dalam skenario di mana dataset atau nilai besar perlu dibagikan di banyak tugas atau tahap komputasi. Misalnya, pada operasi join di mana satu DataFrame atau RDD jauh lebih kecil daripada yang lain, menyiarkan DataFrame/RDD yang lebih kecil dapat secara signifikan mengurangi jumlah data yang di-shuffle melalui jaringan selama operasi join.
- Skenario yang Menguntungkan:
- Operasi Join: Menyiarkan dataset yang lebih kecil untuk operasi join dapat sangat meningkatkan performa dengan mengurangi lalu lintas jaringan dan mempercepat eksekusi tugas.
- Tabel Lookup: Menyiarkan tabel lookup atau kamus kecil yang digunakan untuk operasi enrichment atau filtering dapat meningkatkan performa dengan menghindari transfer data berulang.
- Pembelajaran Mesin: Menyiarkan vektor fitur atau parameter model ke worker node selama pelatihan terdistribusi dapat mempercepat proses pelatihan, terutama saat vektor fitur atau parameter relatif kecil dibandingkan dataset.
- Tantangan:
- Overhead Memori: Menyiarkan variabel besar dapat mengonsumsi memori signifikan pada worker node, yang berpotensi menyebabkan error kehabisan memori jika tidak dikelola dengan hati-hati.
- Kongesti Jaringan: Menyiarkan variabel besar juga dapat menimbulkan kongesti jaringan selama fase broadcast awal, terutama pada klaster besar dengan bandwidth jaringan terbatas.
- Data Dinamis: Broadcast variables bersifat immutable setelah disiarkan, sehingga tidak cocok untuk skenario di mana data yang disiarkan perlu diperbarui secara dinamis selama eksekusi job Spark.
14. Bagaimana Anda mengoptimalkan job Spark menggunakan partitioning dan coalescing?
Pertanyaan ini menilai kemampuan kandidat untuk mengoptimalkan job Spark, keterampilan kunci untuk meningkatkan performa dan efisiensi. Melalui tuning performa Spark, kita dapat memanfaatkan kerangka kerja terdistribusi Spark dengan menggunakan partitioning dan coalescing, yang mengelola distribusi beban kerja di seluruh klaster agar operasi data dilakukan lebih cepat.
Jawaban:
- Partitioning: Mengontrol jumlah partisi dalam RDD atau DataFrame. Gunakan
.repartition()untuk meningkatkan atau mendistribusikan partisi secara merata. Ini lebih mahal secara komputasi dan sebaiknya hanya digunakan saat kita memerlukan pembagian data yang merata untuk pemrosesan seimbang. - Coalescing: Mengurangi jumlah partisi tanpa melakukan full shuffle, yang lebih efisien daripada repartition saat mengurangi jumlah partisi. Kita melakukan ini dengan
.coalesce().
# Increasing partitions (full shuffle)
df_repartitioned = df.repartition(10)
# Reducing partitions (no full shuffle)
df_coalesced = df.coalesce(2)
Perhatikan bahwa pertanyaan lanjutan mungkin menyinggung kapan operasi ini paling berguna. Pastikan untuk menyebutkan bahwa ini lebih efektif saat bekerja pada dataset besar, dan daya komputasi sebaiknya tidak dihamburkan pada dataset kecil.
15. Jelaskan interoperabilitas Spark dengan format serialisasi data
Profesional data akan berinteraksi dengan beragam format data. Masing-masing memiliki trade-off berbeda. Pastikan Anda dapat menjelaskan bagaimana Spark umumnya berinteraksi dengan format-format ini dan menawarkan gambaran performa tingkat tinggi serta pertimbangan untuk ekosistem yang lebih luas.
- Dukungan Format Serialisasi Data: Spark dapat beroperasi dengan format serialisasi data seperti Avro, Parquet, atau ORC melalui dukungan bawaan atau pustaka pihak ketiga. Format-format ini menawarkan keunggulan seperti kompresi efisien, penyimpanan kolumnar, dan evolusi skema, sehingga cocok untuk pemrosesan dan penyimpanan data dalam pipeline berbasis Spark.
- Optimisasi Pembacaan Data: Spark mengoptimalkan operasi baca/tulis data dengan format-format ini dengan memanfaatkan pembaca dan penulis khusus yang mengeksploitasi struktur internal dan teknik kompresinya. Misalnya, Parquet dan ORC memanfaatkan penyimpanan kolumnar untuk meminimalkan overhead I/O dan meningkatkan performa query.
- Trade-off Format Data: Trade-off mencakup efisiensi penyimpanan (mis. rasio kompresi), performa (mis. throughput baca/tulis), dan kompatibilitas dengan alat pemrosesan data lainnya. Memilih format serialisasi yang tepat bergantung pada faktor seperti karakteristik data, pola query, dan kebutuhan integrasi dalam pipeline data.
Pertanyaan Wawancara Pengodean Spark
Pertanyaan pengodean ini akan berfokus pada penggunaan PySpark untuk berinteraksi dengan lingkungan Spark.
16. Temukan N kata paling sering muncul dalam sebuah berkas teks besar
Pertanyaan ini memeriksa kemampuan Anda berinteraksi dengan Spark dan memahami pemanfaatan mapping di Spark itu sendiri.
from pyspark import SparkContext
# create your spark context
sc = SparkContext("local", "WordCount")
# import a text file from a local path
lines = sc.textFile("path/to/your/text/file.txt")
# split and map the words
# then reduce by using the words as keys and add to the count
word_counts = lines.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
# order the words and take only the top N frequent words
top_n_words = word_counts.takeOrdered(N, key=lambda x: -x[1])
print(top_n_words)
17. Cari nilai rata-rata dari nilai-nilai dalam sebuah RDD
Pertanyaan ini cara yang bagus untuk menunjukkan apakah seseorang tahu cara membuat RDD sederhana dan memanipulasinya. Mencari rata-rata nilai adalah tugas yang sangat umum bagi profesional data dan penting bagi Anda untuk memahami cara mengambil data dan membentuknya dalam konteks Spark.
from pyspark import SparkContext
# Create sparkContext and name it “Average”
sc = SparkContext("local", "Average")
# Generate Spark RDD
data = sc.parallelize([1, 2, 3, 4, 5])
# Sum the RDD, count the number of values in RDD
total_sum = data.sum()
count = data.count()
# divide sum by count to get average
average = total_sum / count
print("Average:", average)
18. Lakukan left outer join antara dua RDD
Melakukan tugas manipulasi dan transformasi data seperti join adalah komponen kunci SparkSQL. Ini memungkinkan data digabungkan dari berbagai sumber untuk analisis data.
from pyspark import SparkContext
# Create SparkContext
sc = SparkContext("local", "LeftOuterJoin")
# Create two RDDs with tuples sharing keys
rdd1 = sc.parallelize([(1, 'a'), (2, 'b'), (3, 'c')])
rdd2 = sc.parallelize([(1, 'x'), (2, 'y')])
# Use the .leftOuterJoin() method to join the first rdd to the second rdd
joined_rdd = rdd1.leftOuterJoin(rdd2)
# Use the .collect() method to show the rdd
print(joined_rdd.collect())
19. Baca data dari Kafka, lakukan transformasi, lalu tulis hasilnya ke HDFS
Ini menguji kemampuan Anda memasukkan data dari sumber data eksternal dan pemahaman tentang bagaimana Spark dapat terhubung ke sumber data eksternal. Fokuslah pada konsep umum, seperti perlunya mengimpor ekstensi/utilitas untuk aliran data tertentu dibandingkan menghafal kode secara persis. Perhatikan bahwa untuk SparkContext, kami memilih memiliki appname (KafkaWordCount) sebagai parameter opsional, tetapi ini baik untuk menjaga proses tetap jelas.
# Import the sparkcontext, additionally import streaming context and Kafka
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
# Create context
sc = SparkContext("local", "KafkaWordCount")
# Use streaming context to bring in data at 10 second intervals
ssc = StreamingContext(sc, 10) # 10-second batch interval
# Use Kafka param dictionary in order to connect to the stream using the streaming context, the topic of interest, and the parameters
kafka_params = {"metadata.broker.list": "broker1:9092,broker2:9092"}
kafka_stream = KafkaUtils.createDirectStream(ssc, ["topic"], kafka_params)
# save the results of this stream to lines
# perform MapReduce in order to generate dictionary and count by keys
lines = kafka_stream.map(lambda x: x[1])
word_counts = lines.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
# save to external file
word_counts.saveAsTextFiles("hdfs://path/to/save")
# start context until you terminate
ssc.start()
ssc.awaitTermination()
20. Bagaimana Anda melakukan transformasi dan action dasar pada sebuah DataFrame Spark?
Pertanyaan ini mengevaluasi pemahaman kandidat tentang operasi DataFrame di Spark.
Transformasi adalah operasi pada DataFrame yang mengembalikan DataFrame baru, seperti select, filter, dan groupBy. Action adalah operasi yang memicu komputasi dan mengembalikan hasil, seperti show, count, dan collect.
Cuplikan ini menunjukkan pemilihan kolom, pemfilteran baris, dan melakukan agregasi group-by.
# Select specific columns
selected_df = df.select("column1", "column2")
# Filter rows based on a condition
filtered_df = df.filter(df["column1"] > 100)
# Group by a column and perform aggregation
grouped_df = df.groupBy("column2").agg({"column1": "sum"})
# Show the results
selected_df.show()
filtered_df.show()
grouped_df.show()
Pemikiran Akhir
Menguasai pertanyaan wawancara ini adalah langkah awal yang bagus untuk menjadi profesional data. Spark adalah infrastruktur umum yang digunakan banyak organisasi untuk menangani pipeline big data mereka. Memahami manfaat dan tantangan Spark akan membantu Anda menonjol sebagai profesional data yang berpengetahuan. Ini baru permulaan! Mendapatkan pengalaman langsung dengan Spark adalah cara terbaik untuk belajar.
Anda dapat memulai dengan kursus dan tutorial PySpark berikut di DataCamp:
FAQ Wawancara Spark
Bagaimana saya mulai belajar Spark jika saya baru di teknologi big data?
Jelajahi kursus Datacamp seperti Introduction to PySpark, Introduction to Spark SQL in Python, dan Big Data with PySpark untuk memulai.
Apa saja kasus penggunaan umum Spark dalam aplikasi dunia nyata?
Spark digunakan untuk pipeline ETL, eksplorasi data, analitik real-time, pembelajaran mesin, dan data warehousing. Pengetahuan Spark memungkinkan Anda mendapatkan posisi di banyak industri.
Bagaimana Spark dibandingkan dengan kerangka kerja pemrosesan big data lain seperti Hadoop MapReduce?
Spark menyimpan hasil di memori sebanyak mungkin sedangkan MapReduce menulis hasil perantara ke disk. Namun, Spark dapat memanfaatkan infrastruktur Hadoop seperti YARN untuk manajemen sumber dayanya sehingga keduanya sering bekerja bersama.
Apakah Spark cocok untuk tugas pemrosesan data skala kecil atau hanya untuk big data?
Ya. Spark dirancang untuk diskalakan berdasarkan kebutuhan pemrosesan data. Fungsionalitas Spark tertentu yang dirancang untuk pengoptimalan performa dapat membuang daya komputasi pada dataset kecil sehingga Anda mungkin perlu menyesuaikan pipeline Anda.
Bisakah saya menggunakan Spark dengan bahasa selain Python?
Ya. Spark dapat digunakan dengan Scala, Java, R, dan SQL.
Saya seorang data scientist dengan pengalaman dalam analisis spasial, machine learning, dan pipeline data. Saya pernah bekerja dengan GCP, Hadoop, Hive, Snowflake, Airflow, dan proses data science/engineering lainnya.

