আমি কোনও টেবিলে যোগদান করার সময় স্পার্কের আচরণটি অন্বেষণ করছি। আমি ডেটাব্রিক্স ব্যবহার করছি।
আমার ডামি দৃশ্যটি হ'ল:
ডেটাফ্রেম এ হিসাবে বাহ্যিক সারণি পড়ুন (অন্তর্নিহিত ফাইলগুলি ডেল্টা ফর্ম্যাটে রয়েছে)
ডেটাফ্রেম বিটিকে ডেটাফ্রেম এ হিসাবে নির্দিষ্ট নির্দিষ্ট কলামগুলির সাথে নির্দিষ্ট করুন
কলাম 1 এবং কলাম 2 এ ডেটাফ্রেমগুলি এ এবং বিতে যোগদান করুন
(হ্যাঁ, এটি খুব একটা বোঝায় না, আমি স্পার্কের অন্তর্নিহিত যান্ত্রিকগুলি বোঝার জন্য কেবল পরীক্ষা করছি)
a = spark.read.table("table") \
.select("column1", "column2", "column3", "column4") \
.withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5")))))
b = a.select("column1", "column2", "columnA")
c= a.join(b, how="left", on = ["column1", "column2"])
আমার প্রথম চেষ্টাটি কোডটি যেমন চালানো হয়েছিল (চেষ্টা 1)। আমি তখন পুনরায় বিভাজন এবং ক্যাশে দেওয়ার চেষ্টা করেছি (চেষ্টা 2)
a = spark.read.table("table") \
.select("column1", "column2", "column3", "column4") \
.withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5")))))
.repartition(col("column1"), col("column2")).cache()
অবশেষে, আমি পুনরায় বিভাগ করেছি, বাছাই করেছি এবং ক্যাশে করেছি
a = spark.read.table("table") \
.select("column1", "column2", "column3", "column4") \
.withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5")))))
.repartition(col("column1"), col("column2")).sortWithinPartitions(col("column1"), col("column2")).cache()
উত্সাহিত সম্পর্কিত dags সংযুক্ত হিসাবে।
আমার প্রশ্নগুলি হ'ল:
কেন চেষ্টা 1 এ টেবিলটি ক্যাশে হয়েছে বলে মনে হচ্ছে যদিও ক্যাশে স্পষ্টভাবে নির্দিষ্ট করা হয়নি।
InMemoreTableScan সর্বদা এই ধরণের অন্য নোড দ্বারা অনুসরণ করা হয়।
কেন তিনটি ধাপে তিনটি ক্যাচিং প্রদর্শিত হচ্ছে?
প্রয়াসে কেন 3 হোলসটেজকোডিজেন একটি (এবং কেবলমাত্র একটি) ইনমোয়ার টেবিলস্ক্যান অনুসরণ করে।