Saya mencoba menghitung elemen RDD berikut menggunakan metode count(). Yang pertama adalah sebagai berikut:

scala> val data_wo_header=dropheader(data)
data_wo_header: org.apache.spark.rdd.RDD[String]

Ketika saya Mengandalkan ini, saya mendapatkan:

scala> data_wo_header.count()
res1: Long = 20000263 

Operasi ini relatif cepat dan memakan waktu sekitar 26 detik

Sekarang saya Transform RDD sebagai berikut:

scala> val ratings_split = data_wo_header.map(line => line.split(",")).persist()
ratings_split: org.apache.spark.rdd.RDD[Array[String]]

scala> ratings_split.count()
res2: Long = 20000263  

Penghitungan ini memakan waktu sekitar 5 menit. Adakah yang bisa menyarankan mengapa waktu membaca hitungan meningkat secara dramatis? Fungsi drop header terlihat seperti ini hanya untuk menghapus baris pertama:

  def dropheader(data: RDD[String]): RDD[String] = {
   data.mapPartitionsWithIndex((idx, lines) => {
    if (idx == 0) {
     lines.drop(1)
    }
   lines
   })
  }

data hanya val data = sc.textFile(file, 2).cache()

0
Prateek Agrawal 12 Maret 2017, 13:22

2 jawaban

Jawaban Terbaik

Yang kedua jelas lebih lama karena Anda tidak hanya menghitung baris, Anda juga mengubah setiap baris menjadi larik string.

Menggunakan persistent() tanpa opsi berarti menggunakan MEMORY_ONLY dan oleh karena itu sama persis dengan menggunakan cache().

Sekarang 5 menit tampaknya mahal tetapi itu tergantung pada konfigurasi Anda (total memori, CPU) tetapi juga jumlah elemen per baris.

Seperti yang dikatakan Chobeat, Anda perlu menyelidiki dengan Spark UI.

1
glefait 12 Maret 2017, 13:00

Nah, ini lebih mudah bagi Anda untuk memverifikasi dengan melihat ke UI Spark dan melihat tahapan yang memakan waktu lebih lama. Peta di atas data mungkin memerlukan beberapa waktu untuk membahas seluruh kumpulan data dan itu menjelaskan perlambatannya. Juga persist() dapat memperkenalkan beberapa overhead tapi saya tidak yakin tentang itu.

Saran saya adalah membaca CSV itu menggunakan sumber data CSV jika Anda bisa.

0
Chobeat 12 Maret 2017, 12:20