ক্যাশে এবং অবিচলিত মধ্যে পার্থক্য কি?


উত্তর:


222

এর সাথে cache(), আপনি কেবলমাত্র ডিফল্ট স্টোরেজ স্তরটি ব্যবহার করেন:

  • MEMORY_ONLYআরডিডির জন্য
  • MEMORY_AND_DISKডেটাসেটের জন্য

এর সাথে persist()আপনি আরডিডি এবং ডেটাসেট উভয়ের জন্য কোন স্টোরেজ স্তরটি চান তা নির্দিষ্ট করতে পারেন ।

অফিসিয়াল ডক্স থেকে:

  • আপনি এটিতে () বা () পদ্ধতি RDDব্যবহার করে অবিরত থাকতে চিহ্নিত করতে পারেন ।persistcache
  • প্রতিটি জেদী RDDআলাদা ব্যবহার করে সংরক্ষণ করা যায়storage level
  • cache() মেথড ডিফল্ট স্টোরেজ স্তর, যা ব্যবহার করার জন্য একটি সাঁটে লেখার হয় StorageLevel.MEMORY_ONLY(স্টোর মেমরি বস্তু deserialized)।

persist()আপনি যদি কোনও স্টোরেজ স্তর নির্ধারণ করতে চান তবে ব্যবহার করুন :

  • MEMORY_ONLYথেকে RDD
  • বা ডেটাসেটেরMEMORY_AND_DISK জন্য

অফিসিয়াল ডকুমেন্টেশনের জন্য আকর্ষণীয় লিঙ্ক: কোন স্টোরেজ স্তরটি চয়ন করতে হবে


17
নোট করুন যে cache()এখন MEMORY_AND_DISK
ximiki

আমি উপরের মন্তব্যটি সঠিক বলে মনে করি না। সর্বশেষতম অফিসিয়াল ডকুমেন্টেশন পড়া, লিংক আহার্স ব্যবহার করে শেষ বুলেট পয়েন্টের সাথে প্রান্তিককরণ সরবরাহ করে ... ডিফল্ট স্টোরেজ স্তরটি ব্যবহার করার জন্য ক্যাশে () পদ্ধতিটি সংক্ষিপ্ত আকার, যা স্টোরেজলিভেল EM স্মৃতিচিহ্নগুলি (মেমরিতে ডিসরিয়ালাইজড অবজেক্টগুলি সঞ্চয় করে)।
ব্যবহারকারী 2596560

1
@ximiki, MEMORY_AND_DISKশুধুমাত্র ডেটাসেটের জন্য ডিফল্ট মান। MEMORY_ONLYএখনও RDD জন্য ডিফল্ট মান
ahars

1
@ ব্যবহারকারী 2596560 মন্তব্যটি ডেটাসেটের ডিফল্ট ক্যাশে মানের জন্য সঠিক। আপনি আরডিডির পক্ষে ঠিক বলেছেন যা এখনও স্মৃতিচারণের জন্য ডিফল্ট মান রাখে
আহার্স

83

cacheএবং persistঅপারেশন মধ্যে পার্থক্য নিখুঁত বাক্য গঠনমূলক। ক্যাশে হ'ল স্থির বা স্থির হওয়া ( MEMORY_ONLY) এর সমার্থক শব্দ , অর্থাৎ cacheকেবলমাত্র persistডিফল্ট স্টোরেজ স্তরের সাথে থাকেMEMORY_ONLY


/ ** * ডিফল্ট স্টোরেজ স্তর ( MEMORY_ONLY) এর সাথে এই আরডিডি রাখুন । * /
ডিফ অব্যাহত থাকে (): এই.টি টাইপ = অব্যাহত থাকে (স্টোরেজলিভেল.মেমোরওয়াইথলয়)

/ ** * ডিফল্ট স্টোরেজ স্তর ( MEMORY_ONLY) এর সাথে এই আরডিডি রাখুন । * /
ডিফ ক্যাশে (): এটি.প্রকার = অবিরত ()

আরও বিশদ এখানে দেখুন ...


ক্যাচিং বা অধ্যবসায় হ'ল (পুনরাবৃত্ত এবং ইন্টারেক্টিভ) স্পার্ক গণনার জন্য অপ্টিমাইজেশন কৌশল techniques তারা অন্তর্বর্তী আংশিক ফলাফল সংরক্ষণে সহায়তা করে যাতে পরবর্তী পর্যায়ে এগুলি পুনরায় ব্যবহার করা যায়। এই হিসাবে অন্তর্বর্তীকালীন ফলাফলগুলি RDDস্মৃতিতে (ডিফল্ট) বা আরও শক্ত স্টোরেজ যেমন ডিস্ক এবং / অথবা প্রতিলিপি করা হয়। অপারেশন RDDব্যবহার cacheকরে ক্যাশে করা যায়। persistঅপারেশন ব্যবহার করেও তাদের ধরে রাখা যায় ।

persist, cache

এই ফাংশনগুলি এ এর ​​স্টোরেজ স্তরটি সামঞ্জস্য করতে ব্যবহার করা যেতে পারে RDD। মেমরি মুক্ত করার সময়, স্পার্ক কোন পার্টিশন রাখতে হবে তা সিদ্ধান্ত নিতে স্টোরেজ স্তর সনাক্তকারী ব্যবহার করবে। প্যারামিটার কম ভেরিয়েন্ট persist() এবং cache() কেবল এর জন্য সংক্ষিপ্ত বিবরণ persist(StorageLevel.MEMORY_ONLY).

সতর্কতা : একবার স্টোরেজ স্তর পরিবর্তন করা হয়েছে, এটি আবার পরিবর্তন করা যাবে না!

সতর্কতা-ক্যাশে ন্যায়বিচারের সাথে ... দেখুন ( (কেন) আমাদের ক্যাশে কল করতে বা কোনও আরডিডি চালিয়ে যাওয়ার প্রয়োজন নেই )

আপনি কেবল RDDস্মৃতিতে ক্যাশে রাখতে পারেন তার অর্থ এই নয় যে আপনার অন্ধভাবে এটি করা উচিত। ডেটাসেটটি কতবার অ্যাক্সেস করা হয় এবং এটি করার সাথে জড়িত কাজের পরিমাণের উপর নির্ভর করে বর্ধিত মেমরি চাপের দ্বারা প্রদত্ত দামের তুলনায় পুনরুক্তি দ্রুততর হতে পারে।

এটি বলার অপেক্ষা রাখে না যে আপনি যদি একবার কেবলমাত্র একটি ডেটাসেট পড়েন তবে এটির ক্যাশে করার কোনও অর্থ নেই, এটি আসলে আপনার কাজটিকে ধীর করে দেবে। ক্যাশেড ডেটাসেটের আকারটি স্পার্ক শেল থেকে দেখা যায় ..

তালিকা বৈকল্পিক ...

def cache(): RDD[T]
 def persist(): RDD[T]
 def persist(newLevel: StorageLevel): RDD[T]

* নীচের উদাহরণ দেখুন: *

val c = sc.parallelize(List("Gnu", "Cat", "Rat", "Dog", "Gnu", "Rat"), 2)
     c.getStorageLevel
     res0: org.apache.spark.storage.StorageLevel = StorageLevel(false, false, false, false, 1)
     c.cache
     c.getStorageLevel
     res2: org.apache.spark.storage.StorageLevel = StorageLevel(false, true, false, true, 1)

এখানে চিত্র প্রবেশ করান

দ্রষ্টব্য: ক্যাশে এবং অধ্যবসায়ের অধ্যবসায়ের মধ্যে খুব ছোট এবং খাঁটি সিনট্যাকটিক পার্থক্যের কারণে RDDদুটি পদটি প্রায়শই পরস্পরের পরিবর্তে ব্যবহৃত হয়।

এখানে আরও চাক্ষুষভাবে দেখুন ....

স্মৃতি এবং ডিস্কে স্থির থাকে:

এখানে চিত্র বর্ণনা লিখুন

ক্যাশে

ক্যাশিং আপনার আবেদনের কার্যকারিতা অনেকাংশে উন্নত করতে পারে।

এখানে চিত্র বর্ণনা লিখুন


আমার একটি ব্লকের ভিতরে একটি ডিএফ রয়েছে I আমি কীভাবে এটি অ্যাক্সেস করতে পারি।
বিন্দুমালিনী কে কে

48

এখানে কোন পার্থক্য নেই. থেকে RDD.scala

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()

23

স্পার্ক 5 ধরণের স্টোরেজ স্তর দেয়

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache()ব্যবহার করবে MEMORY_ONLY। আপনি যদি অন্য কিছু ব্যবহার করতে চান তবে ব্যবহার করুন persist(StorageLevel.<*type*>)

ডিফল্টরূপে persist()JVM হিপে ডেবিহীন অবজেক্ট হিসাবে সংরক্ষণ করবে।


4

ক্যাশে () এবং অব্যাহত রাখুন () উভয় পদ্ধতিই স্পার্ক গণনার কর্মক্ষমতা উন্নত করতে ব্যবহৃত হয়। এই পদ্ধতিগুলি মধ্যবর্তী ফলাফলগুলি সংরক্ষণে সহায়তা করে যাতে পরবর্তী পর্যায়ে এগুলি পুনরায় ব্যবহার করা যায়।

ক্যাশে () এবং অব্যাহত () এর মধ্যে কেবলমাত্র পার্থক্য হ'ল, ক্যাশে কৌশল ব্যবহার করে আমরা কেবল তখনই প্রয়োজন মেমরিতে মধ্যবর্তী ফলাফলগুলি সংরক্ষণ করতে পারি যখন প্রয়োজন থাকা অবস্থায় () আমরা মধ্যবর্তী ফলাফলগুলি সংরক্ষণ করতে পারি 5 টি স্টোরেজ স্তরগুলিতে (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.