wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Responsi Big Data and Predictive Lanjut

Total questions: 86

Worksheet time: 47mins

Name
Class
Date
1.

Apa fungsi utama dari SparkContext dalam PySpark?

a)

Membaca file CSV

b)

Membuat koneksi cluster

c)

Menulis data ke tabel

d)

Menambah kolom data

2.

Apa peran dari master dalam konfigurasi cluster Spark?

a)

Mengirim hasil perhitungan ke worker

b)

Mengatur pembagian data dan perhitungan ke worker

c)

Menerima data dari worker

d)

Menyimpan data secara lokal

3.

Bagaimana cara membuat SparkSession di PySpark?

a)

spark = SparkSession.builder.create()

b)

spark = SparkSession.builder.getOrCreate()

c)

spark = SparkContext()

d)

spark = SparkSession.start()

4.

Apakah output dari perintah print(spark.catalog.listTables())?

a)

Daftar kolom di DataFrame

b)

Daftar tabel dalam SparkSession

c)

Daftar semua worker dalam cluster

d)

Informasi konfigurasi SparkSession

5.

Apa yang dilakukan perintah flights10.filter("distance > 1000")?

a)

Menampilkan semua data di tabel flights10

b)

Memfilter data dengan jarak di atas 1000

c)

Menghapus data yang jaraknya kurang dari 1000

d)

Mengelompokkan data berdasarkan jarak

6.

Bagaimana cara melakukan query untuk menampilkan hanya data dari kolom origin, dest, dan distance?

a)

flights.select(['origin', 'dest', 'distance'])

b)

flights.filter('origin', 'dest', 'distance')

c)

flights.groupby(['origin', 'dest', 'distance'])

d)

flights.where(['origin', 'dest', 'distance'])

7.

Apa tujuan dari perintah flights.withColumn('duration_hrs', flights.air_time / 60)?

a)

Menambahkan kolom baru duration_hrs

b)

Menghapus kolom air_time

c)

Mengganti nilai di kolom air_time

d)

Menghapus data dalam kolom duration_hrs

8.

Bagaimana cara menghitung rata-rata air_time dari data yang berasal dari SEA?

a)

flights.filter(flights.origin == 'SEA').groupBy().avg('air_time')

b)

flights.select('air_time').avg().filter(flights.origin == 'SEA')

c)

flights.groupBy('origin').filter('SEA').avg('air_time')

d)

flights.avg('air_time').where(flights.origin == 'SEA')

9.

Perintah apa yang digunakan untuk melakukan inner join antara DataFrame employees dan departments berdasarkan dept_id?

a)

employees.join(departments, 'dept_id', 'inner')

b)

employees.union(departments, 'dept_id', 'inner')

c)

employees.filter(departments, 'dept_id', 'inner')

d)

employees.group(departments, 'dept_id', 'inner')

10.

Perintah apa yang digunakan untuk melakukan left join di PySpark?

a)

join(df1, df2, 'left')

b)

join(df1, df2, 'left_outer')

c)

union(df1, df2, 'left')

d)

merge(df1, df2, 'left_outer')

11.

Bagaimana cara menghitung rata-rata kolom distance untuk tiap manufacturer?

a)

flights.groupBy('manufacturer').avg('distance')

b)

flights.avg('distance').groupBy('manufacturer')

c)

flights.agg('manufacturer').avg('distance')

d)

flights.filter('manufacturer').avg('distance')

12.

Apa hasil dari perintah flights.describe('air_time', 'distance').show()?

a)

Menghapus nilai kosong pada kolom air_time dan distance

b)

Menampilkan statistik deskriptif air_time dan distance

c)

Mengelompokkan data berdasarkan air_time dan distance

d)

Menghitung total air_time dan distance

13.

Apa yang dihasilkan oleh perintah flights10.show(5)?

a)

Menampilkan 5 baris pertama data dari flights10

b)

Menampilkan kolom-kolom terpilih dari flights10

c)

Menghapus 5 baris pertama di flights10

d)

Mengurutkan data flights10

14.

Apa fungsi dari filter("distance > 1000") dalam Spark DataFrame?

a)

Memilih kolom distance di atas 1000

b)

Menampilkan data yang distance-nya lebih dari 1000

c)

Mengurutkan data berdasarkan distance

d)

Mengelompokkan data berdasarkan distance

15.

Apa fungsi dari filter("distance > 1000") dalam Spark DataFrame?

a)

Memilih kolom distance di atas 1000

b)

Menampilkan data yang distance-nya lebih dari 1000

c)

Mengurutkan data berdasarkan distance

d)

Mengelompokkan data berdasarkan distance

16.

Dalam PySpark, apa fungsi dari flights.selectExpr("origin", "dest", "distance/(air_time/60) as avg_speed")?

a)

Menambah kolom avg_speed berdasarkan ekspresi yang diberikan

b)

Menghapus kolom avg_speed

c)

Mengurutkan data berdasarkan avg_speed

d)

Mengganti nilai kolom distance

17.

Bagaimana cara menampilkan semua tabel yang terdaftar dalam SparkSession saat ini?

a)

spark.catalog.listTables()

b)

spark.showTables()

c)

spark.catalog.show()

d)

spark.listTables()

18.

Apa fungsi dari spark.table('flights')?

a)

Membuat tabel baru bernama flights

b)

Menghapus tabel flights

c)

Mengembalikan DataFrame dari tabel flights

d)

Menampilkan tabel flights dalam Spark UI

19.

Apa kegunaan perintah flights.withColumn('duration_hrs', flights.air_time / 60)?

a)

Mengkonversi kolom air_time ke jam dan menambah kolom duration_hrs

b)

Menghapus kolom air_time

c)

Mengubah semua data di air_time menjadi menit

d)

Menyimpan data ke tabel baru

20.

Bagaimana cara menghitung jumlah total durasi (jam) untuk seluruh penerbangan?

a)

flights.groupBy().sum('duration_hrs')

b)

flights.sum('duration_hrs')

c)

flights.withColumn('duration_hrs', flights.air_time/60).groupBy().sum('duration_hrs')

d)

flights.sum(flights.duration_hrs)

21.

Apa hasil dari perintah flights.describe('distance').show()?

a)

Menghapus kolom distance

b)

Menghitung statistik deskriptif untuk distance

c)

Mengganti nilai distance dengan rata-rata

d)

Mengelompokkan data berdasarkan distance

22.

Perintah apa yang digunakan untuk melakukan join antar DataFrame flights dan airports berdasarkan dest?

a)

flights.join(airports, "dest", "left")

b)

flights.concat(airports, "dest", "left")

c)

flights.combine(airports, "dest", "left")

d)

flights.append(airports, "dest", "left")

23.

Apa tujuan penggunaan left_outer dalam join DataFrame?

a)

Menggabungkan data dari kiri saja

b)

Memastikan semua data dari DataFrame sebelah kiri muncul meskipun tidak ada pasangan di kanan

c)

Menghapus data yang tidak berpasangan di kanan

d)

Mengurutkan data berdasarkan kolom di kanan

24.

Perintah apa yang digunakan untuk melakukan join penuh atau lengkap (full outer join)?

a)

join(df1, df2, "full")

b)

join(df1, df2, "complete")

c)

join(df1, df2, "full_outer")

d)

join(df1, df2, "outer_full")

25.

Bagaimana cara menampilkan jumlah total penerbangan dari setiap origin?

a)

flights.groupBy('origin').count()

b)

flights.groupby('origin').sum()

c)

flights.select('origin').sum()

d)

flights.select('origin').group()

26.

Fungsi apa yang digunakan untuk menghitung rata-rata pada kolom tertentu di PySpark?

a)

count()

b)

average()

c)

mean()

d)

avg()

27.

Bagaimana cara menghitung rata-rata dep_delay berdasarkan month dan dest?

a)

flights.groupBy('month', 'dest').avg('dep_delay')

b)

flights.groupby(['month', 'dest']).average('dep_delay')

c)

flights.groupBy('month', 'dest').mean('dep_delay')

d)

flights.groupby('month', 'dest').sum('dep_delay')

28.

Bagaimana cara mengurutkan data flights berdasarkan distance dari nilai terbesar ke terkecil?

a)

flights.sort('distance', ascending=False)

b)

flights.orderBy('distance', ascending=False)

c)

flights.orderBy('distance', False)

d)

flights.sort('distance', 'desc')

29.

Apa hasil dari perintah flights.orderBy('air_time').show()?

a)

Menghapus kolom air_time

b)

Mengelompokkan data berdasarkan air_time

c)

Mengurutkan data berdasarkan air_time dalam urutan naik

d)

Menyimpan hasil ke dalam tabel baru

30.

Bagaimana cara mengurutkan DataFrame berdasarkan beberapa kolom sekaligus di PySpark?

a)

df.orderBy(['col1', 'col2'])

b)

df.sort('col1', 'col2')

c)

df.orderBy('col1', 'col2')

d)

df.sort(['col1', 'col2'])

31.

Apa fungsi dari withColumnRenamed('col1', 'col2') di PySpark?

a)

Mengubah nama kolom col1 menjadi col2

b)

Menghapus kolom col1

c)

Menambahkan kolom baru col2

d)

Mengganti nilai di kolom col1

32.

Bagaimana cara mengubah tipe data kolom distance menjadi float?

a)

flights.withColumn('distance', flights.distance.cast('float'))

b)

flights.cast('distance', 'float')

c)

flights.convert('distance', 'float')

d)

flights.changeType('distance', 'float')

33.

Perintah apa yang digunakan untuk menambah kolom baru dengan data tetap di PySpark?

a)

withColumn('new_col', lit(10))

b)

addColumn('new_col', 10)

c)

createColumn('new_col', 10)

d)

appendColumn('new_col', 10)

34.

Apa fungsi F.avg dalam PySpark?

a)

Mengambil rata-rata dari kolom yang dipilih

b)

Menghitung jumlah total dari kolom

c)

Mengubah tipe data kolom menjadi integer

d)

Menghapus data duplikat

35.

Fungsi sum dalam PySpark digunakan untuk:

a)

Menggabungkan dua DataFrame

b)

Menambah kolom baru

c)

Menghitung total nilai kolom

d)

Mengurutkan data

36.

Apa yang dihasilkan oleh flights.groupBy("origin").sum("distance")?

a)

Total distance untuk setiap origin

b)

Rata-rata distance untuk setiap origin

c)

Semua kolom dengan nilai distance terurut

d)

Data distance yang difilter

37.

Bagaimana cara memfilter data untuk menunjukkan penerbangan yang berasal dari SEA dengan distance lebih dari 1000?

a)

flights.filter("origin == 'SEA' & distance > 1000")

b)

flights.select('origin', 'distance').where("origin == 'SEA'").where("distance > 1000")

c)

flights.filter((F.col("origin") == 'SEA') & (F.col("distance") > 1000))

d)

flights.query('origin = SEA and distance > 1000')

38.

Fungsi filter pada DataFrame digunakan untuk:

a)

Menghapus baris kosong

b)

Memilih data berdasarkan kondisi tertentu

c)

Menambah kolom baru dengan kondisi

d)

Mengurutkan data berdasarkan kolom tertentu

39.

Bagaimana cara menggabungkan filter untuk menampilkan penerbangan dari SEA dan PDX?

a)

flights.filter((F.col('origin') == 'SEA') | (F.col('origin') == 'PDX'))

b)

flights.where(F.col('origin').isin('SEA', 'PDX'))

c)

flights.filter("origin in ('SEA', 'PDX')")

d)

Semua jawaban benar

40.

Apa yang dihasilkan dari flights.groupBy('origin').agg(F.max('air_time').alias('max_air_time'))?

a)

Rata-rata waktu terbang untuk setiap origin

b)

Jumlah total penerbangan untuk setiap origin

c)

Waktu terbang maksimum untuk setiap origin

d)

Waktu terbang minimum untuk setiap origin

41.

Bagaimana cara menghitung jumlah penerbangan unik untuk setiap dest?

a)

flights.groupBy('dest').count()

b)

flights.groupBy('dest').agg(F.countDistinct('flight').alias('unique_flights'))

c)

flights.groupby('dest').sum('flight')

d)

flights.groupby('dest').unique('flight')

42.

Perintah apa yang digunakan untuk menghitung total distance per bulan (month) dan tujuan (dest)?

a)

flights.groupby('month', 'dest').agg(F.sum('distance').alias('total_distance'))

b)

flights.sum('distance').groupBy('month', 'dest')

c)

flights.select('month', 'dest').agg(F.sum('distance'))

d)

flights.groupby('month', 'dest').avg('distance')

43.

Fungsi agg digunakan untuk:

a)

Menggabungkan beberapa DataFrame

b)

Mengelompokkan data berdasarkan beberapa kolom

c)

Melakukan agregasi dengan beberapa fungsi sekaligus

d)

Menyaring data dari DataFrame

44.

Apa tujuan dari perintah flights.write.saveAsTable("flights")?

a)

Menyimpan DataFrame flights sebagai tabel bernama flights

b)

Membaca data dari tabel flights

c)

Menghapus data dalam tabel flights

d)

Menampilkan DataFrame flights sebagai tabel

45.

Bagaimana cara menampilkan semua data dari tabel flights menggunakan SQL dalam Spark?

a)

spark.sql("SELECT * FROM flights")

b)

spark.query("SELECT * FROM flights")

c)

flights.show()

d)

spark.catalog.listTables()

46.

Apa hasil dari flights.write.csv("output_path")?

a)

Menyimpan DataFrame flights dalam format CSV di output_path

b)

Menampilkan DataFrame flights dalam format CSV

c)

Menyimpan DataFrame flights dalam format JSON di output_path

d)

Membaca file CSV dari output_path

47.

Fungsi isNull digunakan untuk:

a)

Menghapus data yang kosong

b)

Memeriksa nilai null di suatu kolom

c)

Mengganti nilai null dengan data tertentu

d)

Memfilter kolom yang tidak null

48.

Apa fungsi distinct() dalam PySpark?

a)

Menampilkan jumlah baris unik

b)

Mengurutkan data berdasarkan kolom tertentu

c)

Menghapus data yang duplikat

d)

Menggabungkan DataFrame duplikat

49.

Bagaimana cara menampilkan data pada DataFrame tanpa data duplikat di kolom origin?

a)

flights.select('origin').distinct()

b)

flights.filter('origin').distinct()

c)

flights.unique('origin')

d)

flights.drop_duplicates('origin')

50.

Bagaimana cara menampilkan data flights yang memiliki distance lebih dari 1000 dan berasal dari SEA atau PDX?

a)

flights.filter((F.col('origin').isin('SEA', 'PDX')) & (F.col('distance') > 1000))

b)

flights.where('distance > 1000').filter('origin in ('SEA', 'PDX')')

c)

flights.select('origin', 'distance').filter('distance > 1000 and origin in ('SEA', 'PDX')')

d)

flights.query('origin = SEA OR PDX and distance > 1000')

51.

Perintah apa yang digunakan untuk menggabungkan DataFrame employees dengan departments menggunakan dept_id sebagai kunci?

a)

employees.join(departments, 'dept_id')

b)

employees.select('dept_id').join(departments, 'dept_id')

c)

employees.merge(departments, 'dept_id')

d)

employees.filter('dept_id').join(departments, 'dept_id')

52.

Fungsi min dalam PySpark digunakan untuk:

a)

Menemukan nilai minimum dari suatu kolom

b)

Menghitung rata-rata dari suatu kolom

c)

Menggabungkan dua DataFrame

d)

Menampilkan data berdasarkan kolom

53.

Bagaimana cara menghitung nilai rata-rata arr_delay per bulan (month)?

a)

flights.groupBy('month').avg('arr_delay')

b)

flights.groupby('month').sum('arr_delay')

c)

flights.groupBy('month').mean('arr_delay')

d)

flights.groupby('month').total('arr_delay')

54.

Apa hasil dari flights.groupBy('dest').max('distance')?

a)

Jarak maksimum ke setiap tujuan (dest)

b)

Jarak minimum ke setiap tujuan (dest)

c)

Total jarak untuk setiap tujuan (dest)

55.

Apa hasil dari flights.groupBy('dest').max('distance')?

a)

Jarak maksimum ke setiap tujuan (dest)

b)

Jarak minimum ke setiap tujuan (dest)

c)

Total jarak untuk setiap tujuan (dest)

d)

Waktu terbang maksimum untuk setiap tujuan (dest)

56.

Bagaimana cara membaca file CSV airports.csv sebagai DataFrame di PySpark?

a)

spark.read.csv('airports.csv', header=True, inferSchema=True)

b)

spark.readFile('airports.csv')

c)

spark.csv('airports.csv')

d)

spark.load('airports.csv')

57.

Bagaimana cara mengatur kolom pertama file CSV sebagai header saat membaca file di PySpark?

a)

header=True

b)

header=False

c)

schema=True

d)

schema=False

58.

Fungsi inferSchema=True digunakan untuk:

a)

Memastikan tipe data otomatis ditentukan oleh Spark

b)

Mengabaikan header saat membaca file

c)

Menyimpan data dengan tipe data tertentu

d)

Mengganti kolom data

59.

Apa tujuan utama dari SparkSession dalam PySpark?

a)

Membuat sesi untuk menjalankan tugas Spark

b)

Menambah kolom dalam DataFrame

c)

Membuat filter pada DataFrame

d)

Menampilkan hasil Spark UI

60.

Bagaimana cara memulai SparkSession baru dengan nama aplikasi?

a)

SparkSession.builder.appName("AppName").getOrCreate()

b)

SparkSession.start("AppName")

c)

SparkSession.new("AppName")

d)

sparkSession.create("AppName")

61.

Apakah fungsi dari builder dalam SparkSession.builder?

a)

Menghapus SparkSession lama

b)

Membuat sesi Spark baru

c)

Mengatur konfigurasi SparkSession

d)

Menghentikan SparkSession

62.

Apa peran Spark UI dalam eksekusi PySpark?

a)

Menyimpan hasil dari operasi Spark

b)

Menyediakan antarmuka pengguna untuk memonitor eksekusi

c)

Menyimpan data dari SparkSession

d)

Menghentikan eksekusi Spark

63.

Apa singkatan dari RDD dalam PySpark?

a)

Resilient Distributed Data

b)

Redundant Distributed Data

c)

Resilient Distributed Dataset

d)

Recomputed Distributed Dataset

64.

Apa karakteristik utama dari RDD dalam Spark?

a)

Immutable dan terdistribusi

b)

Mutable dan lokal

c)

Mutable dan terdistribusi

d)

Immutable dan lokal

65.

Bagaimana cara membuat RDD dari sebuah list di PySpark?

a)

spark.createRDD([1, 2, 3])

b)

spark.sparkContext.parallelize([1, 2, 3])

c)

spark.sparkContext.createRDD([1, 2, 3])

d)

spark.RDD([1, 2, 3])

66.

Manakah pernyataan yang benar mengenai transformasi pada RDD?

a)

Transformasi pada RDD langsung mengembalikan hasil

b)

Transformasi pada RDD bersifat lazy (ditunda hingga aksi dilakukan)

c)

Transformasi hanya bisa dilakukan satu kali pada RDD

d)

Transformasi pada RDD bersifat eager (langsung dieksekusi)

67.

Manakah yang termasuk contoh transformasi pada RDD?

a)

collect()

b)

map()

c)

count()

d)

saveAsTextFile()

68.

Manakah yang termasuk contoh aksi (action) pada RDD?

a)

map()

b)

filter()

c)

count()

d)

distinct()

69.

Apa fungsi dari map() pada RDD?

a)

Memfilter data dalam RDD

b)

Menerapkan fungsi ke setiap elemen dalam RDD

c)

Mengurutkan data dalam RDD

d)

Menghapus duplikasi dalam RDD

70.

Apa fungsi dari filter() pada RDD?

a)

Mengelompokkan data dalam RDD

b)

Menerapkan fungsi ke setiap elemen dalam RDD

c)

Memilih elemen yang memenuhi kondisi tertentu

d)

Menggabungkan dua RDD

71.

Bagaimana cara menghitung jumlah elemen dalam sebuah RDD?

a)

rdd.count()

b)

rdd.size()

c)

rdd.len()

d)

rdd.collect()

72.

Apa hasil dari rdd.collect() pada RDD?

a)

Menyimpan data RDD ke file

b)

Mengembalikan semua elemen RDD ke driver dalam bentuk list

73.

Apa hasil dari rdd.collect() pada RDD?

a)

Menyimpan data RDD ke file

b)

Mengembalikan semua elemen RDD ke driver dalam bentuk list

c)

Menghapus duplikasi dalam RDD

d)

Menyimpan hasil RDD di cluster

74.

Apa itu Pair RDD dalam PySpark?

a)

RDD yang memiliki data berbentuk pasangan (key-value)

b)

RDD yang memiliki dua elemen

c)

RDD yang berisi data unik

d)

RDD yang berbentuk matriks

75.

Bagaimana cara membuat Pair RDD dari list [(1, 'a'), (2, 'b'), (3, 'c')]?

a)

spark.parallelize([(1, 'a'), (2, 'b'), (3, 'c')])

b)

spark.sparkContext.makeRDD([(1, 'a'), (2, 'b'), (3, 'c')])

c)

spark.sparkContext.parallelize([(1, 'a'), (2, 'b'), (3, 'c')])

d)

Semua jawaban benar

76.

Fungsi reduceByKey() pada Pair RDD digunakan untuk:

a)

Mengurutkan nilai berdasarkan kunci

b)

Mengelompokkan nilai dengan kunci yang sama dan menerapkan fungsi reduksi

c)

Menggabungkan dua Pair RDD

d)

Menghapus duplikasi pada Pair RDD

77.

Apa fungsi dari groupByKey() pada Pair RDD?

a)

Menghapus nilai dengan kunci yang sama

b)

Mengelompokkan nilai berdasarkan kunci yang sama tanpa menggabungkan nilai

c)

Mengurutkan Pair RDD

d)

Menerapkan fungsi ke setiap nilai

78.

Manakah operasi yang dapat digunakan untuk menghitung jumlah nilai berdasarkan kunci di Pair RDD?

a)

reduceByKey(lambda x, y: x + y)

b)

countByKey()

c)

groupByKey().mapValues(len)

d)

Semua jawaban benar

79.

Apa hasil dari pairRDD.reduceByKey(lambda x, y: x + y) jika pairRDD memiliki data [(1, 2), (1, 3), (2, 4)]?

a)

[(1, 5), (2, 4)]

b)

[(1, 2), (1, 3), (2, 4)]

c)

[(1, 5)]

d)

[(2, 4)]

80.

Apa hasil dari pairRDD.mapValues(lambda x: x + 1) jika pairRDD memiliki data [(1, 2), (2, 3)]?

a)

[(1, 3), (2, 4)]

b)

[(1, 2), (2, 3)]

c)

[(1, 1), (2, 2)]

d)

[(1, 4), (2, 5)]

81.

Apa fungsi dari sortByKey() pada Pair RDD?

a)

Mengurutkan RDD berdasarkan nilai

b)

Mengurutkan RDD berdasarkan kunci

c)

Menghapus duplikasi berdasarkan kunci

d)

Menggabungkan RDD berdasarkan kunci

82.

Bagaimana cara menghitung rata-rata nilai untuk setiap kunci di Pair RDD?

a)

pairRDD.groupByKey().mapValues(lambda x: sum(x) / len(x))

b)

pairRDD.mapValues(lambda x: sum(x) / len(x))

c)

pairRDD.reduceByKey(lambda x, y: (x + y) / 2)

d)

pairRDD.sortByKey().mapValues(lambda x: x / 2)

83.

Manakah pernyataan yang benar mengenai combineByKey()?

a)

Digunakan untuk mengelompokkan nilai tanpa mengubah tipe data

b)

Memungkinkan kombinasi nilai untuk setiap kunci dengan fungsi kustom

c)

Digunakan untuk menghitung total jumlah data dalam Pair RDD

d)

Hanya digunakan untuk Pair RDD dengan data numerik

84.

Fungsi keys() pada Pair RDD digunakan untuk:

a)

Mengembalikan daftar kunci dari Pair RDD

b)

Menghapus duplikasi kunci dalam Pair RDD

c)

Mengembalikan nilai dari Pair RDD

d)

Mengurutkan data dalam Pair RDD

85.

Apa hasil dari pairRDD.keys().collect() jika pairRDD memiliki data [(1, 'a'), (2, 'b'), (3, 'c')]?

a)

[1, 2, 3]

b)

['a', 'b', 'c']

c)

[(1, 'a'), (2, 'b'), (3, 'c')]

d)

[('a'), ('b'), ('c')]

86.

Fungsi join() pada Pair RDD digunakan untuk:

a)

Menggabungkan dua Pair RDD berdasarkan kunci yang sama

b)

Menghapus kunci yang tidak memiliki pasangan

c)

Mengurutkan Pair RDD berdasarkan nilai

d)

Mengelompokkan Pair RDD berdasarkan kunci