আমি কেবল ভাবছি যে অ্যাপাচি স্পার্কে একটি RDD
এবং DataFrame
(স্পার্ক ২.০.০ ডেটা ফ্রেমটি কেবল টাইপ ওরফে Dataset[Row]
) এর মধ্যে পার্থক্য কী ?
আপনি কি অন্যকে রূপান্তর করতে পারবেন?
আমি কেবল ভাবছি যে অ্যাপাচি স্পার্কে একটি RDD
এবং DataFrame
(স্পার্ক ২.০.০ ডেটা ফ্রেমটি কেবল টাইপ ওরফে Dataset[Row]
) এর মধ্যে পার্থক্য কী ?
আপনি কি অন্যকে রূপান্তর করতে পারবেন?
উত্তর:
একটি DataFrame
"ডেটাফ্রেম সংজ্ঞা" এর জন্য গুগল অনুসন্ধানের সাথে ভাল সংজ্ঞা দেওয়া হয়েছে:
ডেটা ফ্রেমটি একটি টেবিল বা দ্বিমাত্রিক অ্যারে-জাতীয় কাঠামো, যাতে প্রতিটি কলামে একটি ভেরিয়েবলের পরিমাপ থাকে এবং প্রতিটি সারিতে একটি করে কেস থাকে।
সুতরাং, একটি DataFrame
এর সারণী বিন্যাসের কারণে একটি অতিরিক্ত মেটাডেটা রয়েছে, যা স্পার্ককে চূড়ান্ত কোয়েরিতে কিছু অনুকূলকরণ চালানোর অনুমতি দেয়।
একটি RDD
অন্যদিকে নিছক একটি হল আর esilient ডি istributed ডি ataset যে অপারেশন এটি বিরুদ্ধে সম্পাদনা করা যেতে পারে যেমন অপ্টিমাইজ করা যাবে না ডেটার একটি ব্ল্যাকবক্স আরো যে, যেমন সীমাবদ্ধ নয়।
যাইহোক, যদি আপনি একটি জন্য একটি DataFrame থেকে যেতে পারেন RDD
তার মাধ্যমে rdd
পদ্ধতি, এবং আপনি একটি থেকে যেতে পারেন RDD
একটি থেকে DataFrame
মাধ্যমে (যদি RDD একটি ট্যাবুলার ফর্ম্যাটে আছে) toDF
পদ্ধতি
সাধারণভাবেDataFrame
ক্যোয়ারী অপ্টিমাইজেশনের কারণে বিল্ট ইন হওয়ার কারণে যেখানে সম্ভব সেখানে ব্যবহার করার পরামর্শ দেওয়া হচ্ছে ।
প্রথম জিনিসটি
DataFrame
বিবর্তিত হয়েছিলSchemaRDD
।
হ্যাঁ .. মধ্যে রূপান্তর Dataframe
এবং RDD
একেবারে সম্ভব।
নীচে কয়েকটি নমুনা কোড স্নিপেট রয়েছে।
df.rdd
হয় RDD[Row]
নীচে ডেটাফ্রেম তৈরির জন্য কয়েকটি বিকল্প রয়েছে।
1) yourrddOffrow.toDF
রূপান্তর DataFrame
।
2) createDataFrame
স্কয়ার প্রসঙ্গ ব্যবহার
val df = spark.createDataFrame(rddOfRow, schema)
যেখানে স্কোমা নীচে কয়েকটি বিকল্প থেকে সুন্দর এসও পোস্ট দ্বারা বর্ণিত হতে পারে ..
স্কেলা কেস ক্লাস এবং স্কালার প্রতিবিম্ব এপিআই থেকেimport org.apache.spark.sql.catalyst.ScalaReflection val schema = ScalaReflection.schemaFor[YourScalacaseClass].dataType.asInstanceOf[StructType]
বা ব্যবহার
Encoders
import org.apache.spark.sql.Encoders val mySchema = Encoders.product[MyCaseClass].schema
স্কিমা দ্বারা বর্ণিত হিসাবে
StructType
এবং ব্যবহার করে তৈরি করা যেতে পারেStructField
val schema = new StructType() .add(StructField("id", StringType, true)) .add(StructField("col1", DoubleType, true)) .add(StructField("col2", DoubleType, true)) etc...
বাস্তবে এখন 3 টি অ্যাপাচি স্পার্ক এপিআই রয়েছে ..
RDD
এপিআই:
RDD
(প্রাণবন্ত বন্টিত ডেটা সেটটি) এপিআই স্পার্ক মধ্যে 1.0 মুক্তির পর হয়েছে।
RDD
এপিআই যেমন অনেক রূপান্তর পদ্ধতি, প্রদান করেmap
(),filter
) (এবংreduce
() ডেটার উপর কম্পিউটেশন সম্পাদন জন্য। এই প্রতিটি পদ্ধতির ফলাফলRDD
পরিবর্তিত ডেটার প্রতিনিধিত্ব করে নতুন in যাইহোক, এই পদ্ধতিগুলি সম্পাদন করার জন্য ক্রিয়াকলাপগুলি কেবল সংজ্ঞায়িত করছে এবং কোনও অ্যাকশন পদ্ধতি না বলা পর্যন্ত রূপান্তরগুলি সম্পাদন করা হয় না। ক্রিয়া পদ্ধতির উদাহরণগুলিcollect
() এবংsaveAsObjectFile
()।
আরডিডি উদাহরণ:
rdd.filter(_.age > 21) // transformation
.map(_.last)// transformation
.saveAsObjectFile("under21.bin") // action
উদাহরণ: আরডিডি সহ বৈশিষ্ট্য দ্বারা ফিল্টার ter
rdd.filter(_.age > 21)
DataFrame
এপিআই
DataFrame
প্রজেক্ট টুংস্টেন উদ্যোগের অংশ হিসাবে স্পার্ক 1.3 একটি নতুন এপিআই প্রবর্তন করেছে যা স্পার্কের কর্মক্ষমতা এবং স্কেলিবিলিটি উন্নত করার চেষ্টা করে।DataFrame
API প্রবর্তন একটি স্কিমা ধারণা ডেটা বর্ণনা করতে, স্কিমা পরিচালনা করতে এবং শুধুমাত্র নোড মধ্যে ডেটা পাস, জাভা ধারাবাহিকতাতে ব্যবহার তুলনায় অনেক বেশি দক্ষ ভাবে স্পার্ক অনুমতি দেয়।
DataFrame
API থেকে আমূল ভিন্নRDD
কারণ এটি একটি রিলেশনাল ক্যোয়ারী পরিকল্পনা যে স্পার্ক এর ক্যাটালিস্ট নিখুঁতকারী নির্বাহ করতে পারেন নির্মাণের জন্য একটি API হয় API- টি। বিল্ডিং কোয়েরি পরিকল্পনার সাথে পরিচিত যারা বিকাশকারীদের পক্ষে এপিআই স্বাভাবিক
এসকিউএল শৈলীর উদাহরণ:
df.filter("age > 21");
সীমাবদ্ধতা: কোডটি নাম অনুসারে ডেটা অ্যাট্রিবিউটকে উল্লেখ করছে তাই সংকলকটির পক্ষে কোনও ত্রুটি ধরা সম্ভব নয়। যদি বৈশিষ্ট্যের নামগুলি ভুল হয় তবে ত্রুটিটি কেবল রানটাইমে সনাক্ত করা হবে যখন ক্যোয়ারী পরিকল্পনাটি তৈরি করা হবে।
এপিআইর সাথে অন্য একটি নেতিবাচক DataFrame
দিকটি হ'ল এটি খুব স্কেল কেন্দ্রিক এবং এটি জাভা সমর্থন করার সময় সমর্থনটি সীমিত।
উদাহরণস্বরূপ, জাভা অবজেক্টের DataFrame
বিদ্যমান থেকে একটি তৈরি করার সময় RDD
, স্পার্কের ক্যাটালিস্ট অপটিমাইজার স্কিমাটি অনুমান করতে পারে না এবং ধরে নিতে পারে যে ডেটা ফ্রেমের কোনও অবজেক্ট scala.Product
ইন্টারফেসটি প্রয়োগ করে । স্কেলা case class
বাক্সটি কার্যকর করে কারণ তারা এই ইন্টারফেসটি প্রয়োগ করে।
Dataset
এপিআই
Dataset
এপিআই, স্পার্ক 1.6 মধ্যে একটি API প্রি-ভিউ রূপে মুক্তি উভয় বোথ ওয়ার্ল্ডস শ্রেষ্ঠ প্রদানের লক্ষ্যে; পরিচিত বস্তু-ভিত্তিক প্রোগ্রামিং স্টাইল এবংRDD
এপিআই -র সংকলন-টাইপ-সুরক্ষা তবে অনুঘটক ক্যোয়ারী অপ্টিমাইজারের কার্যকারিতা বেনিফিট সহ। ডেটাসেটগুলিওDataFrame
এপিআই - র মতো একই দক্ষ অফ-হিপ স্টোরেজ মেকানিজম ব্যবহার করে ।যখন এটি সিরিয়াল করার তথ্য আসে, এপিআইতে এনকোডারগুলির
Dataset
ধারণা থাকে যা জেভিএম উপস্থাপনা (বস্তু) এবং স্পার্কের অভ্যন্তরীণ বাইনারি বিন্যাসের মধ্যে অনুবাদ করে। স্পার্কটিতে অন্তর্নির্মিত এনকোডার রয়েছে যা তারা খুব হ'ল অফ-হিপ ডেটার সাথে ইন্টারঅ্যাক্ট করার জন্য বাইট কোড জেনারেট করে এবং একটি সম্পূর্ণ অবজেক্টটিকে ডি-সিরিয়ালাইজ না করে স্বতন্ত্র বৈশিষ্ট্যগুলিতে অন-ডিমান্ড অ্যাক্সেস সরবরাহ করে very স্পার্ক এখনও কাস্টম এনকোডারগুলিকে প্রয়োগের জন্য একটি এপিআই সরবরাহ করে না, তবে এটি ভবিষ্যতের প্রকাশের জন্য পরিকল্পনা করা হয়েছে।অতিরিক্তভাবে,
Dataset
এপিআই জাভা এবং স্কালা উভয়ের সাথে সমানভাবে কাজ করার জন্য ডিজাইন করা হয়েছে। জাভা অবজেক্টগুলির সাথে কাজ করার সময়, এটি গুরুত্বপূর্ণ যে তারা পুরোপুরি বিন-সম্মতিযুক্ত।
Dataset
এপিআই এসকিউএল স্টাইল উদাহরণ :
dataset.filter(_.age < 21);
মূল্যায়ন পৃথক। মধ্যে DataFrame
& DataSet
:
অনুঘটক স্তরের প্রবাহ। । (স্পার্ক সামিট থেকে ডেটা ফ্রেম এবং ডেটাসেট উপস্থাপনা ক্ষুন্ন করা)
আরও পড়ুন ... ডেটাব্রিক্স নিবন্ধ - থ্রি অ্যাপাচি স্পার্ক এপিআইয়ের গল্প: আরডিডি বনাম ডেটা ফ্রেমস এবং ডেটাসেটস
df.filter("age > 21");
কেবলমাত্র রান সময়ে মূল্যায়ন / বিশ্লেষণ করা যায়। তার স্ট্রিং থেকে। ডেটাসেটের ক্ষেত্রে, ডেটাসেটগুলি শিমের সাথে সামঞ্জস্যপূর্ণ। সুতরাং বয়স শিম সম্পত্তি। যদি আপনার শিমের মধ্যে বয়সের সম্পত্তি না থাকে তবে আপনি অবশ্যই সংকলন সময়ের (অর্থাত্ dataset.filter(_.age < 21);
) প্রথম দিকে জানতে পারবেন । বিশ্লেষণ ত্রুটির মূল্যায়ন ত্রুটি হিসাবে নতুন নামকরণ করা যেতে পারে।
অ্যাপাচি স্পার্ক তিন ধরণের এপিআই সরবরাহ করে
আরডিডি, ডেটাফ্রেম এবং ডেটাসেটের মধ্যে এপিআইয়ের তুলনা এখানে।
স্পার্কের মূল বিমূর্ততাটি হ'ল একটি হ্রাসযুক্ত বিতরণ করা ডেটাসেট (আরডিডি), এটি সমান্তরালভাবে চালিত হওয়া ক্লাস্টারের নোড জুড়ে বিভক্ত উপাদানগুলির একটি সংগ্রহ।
বিতরণকৃত সংগ্রহ:
আরডিডি ম্যাপ্রেডিউস ক্রিয়াকলাপগুলি ব্যবহার করে যা একটি ক্লাস্টারে সমান্তরাল, বিতরণ অ্যালগরিদম সহ বৃহত ডেটাসেটগুলি প্রসেসিং এবং উত্পাদনের জন্য ব্যাপকভাবে গৃহীত হয়। এটি ব্যবহারকারীদের কাজের বন্টন এবং ফল্ট সহনশীলতার চিন্তা না করে উচ্চ-স্তরের অপারেটরগুলির একটি সেট ব্যবহার করে সমান্তরাল গণনা লেখার অনুমতি দেয়।
অপরিবর্তনীয়: বিভাজনযুক্ত রেকর্ডগুলির সংকলনের সমন্বয়ে আরডিডিগুলি। একটি বিভাজন একটি আরডিডি মধ্যে সমান্তরালনের একটি মৌলিক একক, এবং প্রতিটি পার্টিশন তথ্যগুলির একটি যৌক্তিক বিভাগ যা অপরিবর্তনীয় এবং বিদ্যমান পার্টিশনে কিছু রূপান্তরের মাধ্যমে তৈরি হয় mm অবিচ্ছিন্নতা গণনাগুলিতে ধারাবাহিকতা অর্জনে সহায়তা করে।
ফল্ট সহিষ্ণু: আমরা যদি আরডিডি-র কিছু বিভাজন হারাতে পারি, তবে আমরা একাধিক নোড জুড়ে ডেটা প্রতিলিপি না করে একই গণনা অর্জনের জন্য সেই বিভাগে রূপান্তরটি পুনরায় খেলতে পারি। এই বৈশিষ্ট্যটি আরডিডি-র বৃহত্তম লাভ কারণ এটি সংরক্ষণ করে ডেটা ম্যানেজমেন্ট এবং প্রতিরূপে প্রচুর প্রচেষ্টা এবং এইভাবে দ্রুত গণনা অর্জন করে।
অলস মূল্যায়ন: স্পার্কের সমস্ত রূপান্তর অলস, যাতে তারা এখনই তাদের ফলাফলগুলি গণনা করে না। পরিবর্তে, তারা কেবল কিছু বেস ডাটাবেসে প্রয়োগ করা রূপান্তরগুলি মনে রাখে। ট্রান্সফর্মেশনগুলি কেবল তখনই গণনা করা হয় যখন কোনও ক্রিয়াকলাপটির জন্য ড্রাইভার প্রোগ্রামে ফিরে যাওয়ার ফলাফল প্রয়োজন।
কার্যকরী রূপান্তর: আরডিডি দুটি ধরণের ক্রিয়াকলাপ সমর্থন করে: ট্রান্সফর্মেশন, যা বিদ্যমান থেকে একটি নতুন ডাটাবেস তৈরি করে এবং ক্রিয়া, যা ডেটাसेटে একটি গণনা চালানোর পরে ড্রাইভার প্রোগ্রামে একটি মান দেয়।
ডেটা প্রসেসিং ফর্ম্যাটগুলি:
এটি সহজেই এবং দক্ষতার সাথে এমন ডেটা প্রক্রিয়াকরণ করতে পারে যা কাঠামোগত পাশাপাশি স্ট্রাকচারাল ডেটাও থাকে।
প্রোগ্রামিং ভাষা সমর্থিত ভাষা:
আরডিডি এপিআই জাভা, স্কালা, পাইথন এবং আর তে উপলব্ধ
ইনবিল্ট অপটিমাইজেশন ইঞ্জিন নেই: কাঠামোগত ডেটা নিয়ে কাজ করার সময়, আরডিডিগুলি স্পার্কের উন্নততর অপটিমাইজারগুলির অনুঘটকাস্ত্রীয় অপটিমাইজার এবং টুংস্টেন এক্সিকিউশন ইঞ্জিন সহ সুবিধা নিতে পারে না। বিকাশকারীদের এর বৈশিষ্ট্যগুলির উপর ভিত্তি করে প্রতিটি আরডিডি অনুকূল করতে হবে।
কাঠামোগত ডেটা হ্যান্ডলিং: ডেটাফ্রেম এবং ডেটাসেটের বিপরীতে, আরডিডিগুলি ইনজেস্টেড ডেটাগুলির স্কিমা অনুমান করে না এবং ব্যবহারকারীকে এটি নির্দিষ্ট করার প্রয়োজন হয়।
স্পার্ক স্পার্ক 1.3 প্রকাশে ডেটাফ্রেমগুলি প্রবর্তন করেছে। আরডিডিগুলির যে মূল চ্যালেঞ্জগুলি ছিল ডেটাফ্রেম কাটিয়ে উঠেছে।
ডেটাফ্রেম হ'ল নামযুক্ত কলামগুলিতে সংগঠিত ডেটার বিতরণ সংগ্রহ। এটি ধারণামূলকভাবে একটি রিলেশনাল ডাটাবেস বা একটি আর / পাইথন ডেটাফ্রেমের টেবিলের সমতুল্য। ডেটাফ্রেমের সাথে সাথে স্পার্ক অনুঘটক ক্যারিয়ার অপ্টিমাইজার তৈরির জন্য উন্নত প্রোগ্রামিং বৈশিষ্ট্যগুলিও উপভোগ করে যা অনুঘটককারী অপ্টিমাইজার প্রবর্তন করে।
সারি অবজেক্টের বিতরণ সংগ্রহ: একটি ডেটাফ্রেম নামক কলামগুলিতে সংগঠিত ডেটার একটি বিতরণকৃত সংগ্রহ। এটি ধারণামূলকভাবে একটি সম্পর্কিত ডেটাবেজের একটি টেবিলের সমতুল্য, তবে ফণাটির অধীনে আরও সমৃদ্ধ iz
ডেটা প্রসেসিং: স্ট্রাকচার্ড এবং স্ট্রাকচারাল ডেটা ফর্ম্যাটগুলি (অভ্র, সিএসভি, ইলাস্টিক সন্ধান, এবং ক্যাসান্দ্রা) এবং স্টোরেজ সিস্টেমগুলি (এইচডিএফএস, এইচআইভি টেবিল, মাইএসকিউএল, ইত্যাদি) প্রসেসিং। এটি এই সমস্ত বিভিন্ন ডেটা উত্স থেকে পড়তে এবং লিখতে পারে।
অনুঘটক অপ্টিমাইজার ব্যবহার করে অপ্টিমাইজেশন: এটি এসকিউএল কোয়েরি এবং ডেটাফ্রেম এপিআই উভয়কেই ক্ষমতা দেয়। ডেটাফ্রেমে চার ধাপে অনুঘটক গাছের রূপান্তর কাঠামো ব্যবহার করুন,
1.Analyzing a logical plan to resolve references
2.Logical plan optimization
3.Physical planning
4.Code generation to compile parts of the query to Java bytecode.
মৌচাকের সামঞ্জস্যতা: স্পার্ক এসকিউএল ব্যবহার করে আপনি আপনার বিদ্যমান মৌচিক গুদামগুলিতে অপরিশোধিত এইচআইভি অনুসন্ধান চালাতে পারেন। এটি হাইভ ফ্রন্টএন্ড এবং মেটাস্টোর পুনরায় ব্যবহার করে এবং বিদ্যমান হাইভ ডেটা, ক্যোয়ারী এবং ইউডিএফগুলির সাথে আপনাকে সম্পূর্ণ সামঞ্জস্য দেয়।
দুষ্প্রাপ্য ধাতু: দুষ্প্রাপ্য ধাতু whichexplicitly একটি শারীরিক সঞ্চালনের ব্যাকএন্ড উপলব্ধ মেমরির পরিচালনা করে এবং পরিবর্তনশীল অভিব্যক্তি নিরীক্ষার জন্য বাইটকোড জেনারেট করে।
প্রোগ্রামিং ভাষা সমর্থিত:
ডেটাফ্রেম এপিআই জাভা, স্কালা, পাইথন এবং আর তে উপলব্ধ R
উদাহরণ:
case class Person(name : String , age : Int)
val dataframe = sqlContext.read.json("people.json")
dataframe.filter("salary > 10000").show
=> throws Exception : cannot resolve 'salary' given input age , name
আপনি যখন বেশ কয়েকটি রূপান্তর এবং সমষ্টি পদক্ষেপ নিয়ে কাজ করছেন তখন এটি বিশেষভাবে চ্যালেঞ্জিং।
উদাহরণ:
case class Person(name : String , age : Int)
val personRDD = sc.makeRDD(Seq(Person("A",10),Person("B",20)))
val personDF = sqlContext.createDataframe(personRDD)
personDF.rdd // returns RDD[Row] , does not returns RDD[Person]
ডেটাসেট এপিআই হ'ল ডেটা ফ্রেমগুলির একটি এক্সটেনশন যা কোনও টাইপ-সেফ, অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ইন্টারফেস সরবরাহ করে। এটি এমন একটি দৃ strongly়-টাইপযুক্ত, অপরিবর্তনীয়ভাবে সংগ্রহযোগ্য বস্তু যা সম্পর্কিত সম্পর্কিত স্কিমায় ম্যাপ করা হয়।
ডেটাসেটের মূল অংশে, এপিআই হ'ল একটি এনকোডার নামে পরিচিত একটি ধারণা যা জেভিএম অবজেক্ট এবং টেবুলার উপস্থাপনার মধ্যে রূপান্তর করার জন্য দায়ী। সারণীযুক্ত উপস্থাপনাটি স্পার্ক অভ্যন্তরীণ টুংস্টেন বাইনারি ফর্ম্যাট ব্যবহার করে সংরক্ষণ করা হয়, সিরিয়ালযুক্ত ডেটা এবং উন্নত মেমরির ব্যবহারের ক্রিয়াকলাপের অনুমতি দেয়। স্পার্ক ১. আদিম ধরণের (যেমন স্ট্রিং, ইন্টিজার, লং), স্কালা কেস ক্লাস এবং জাভা বিনগুলি সহ বিভিন্ন ধরণের স্বয়ংক্রিয়ভাবে এনকোডার তৈরি করার জন্য সমর্থন সহ আসে।
আরডিডি এবং ডেটাফ্রেম উভয়ের মধ্যে সেরা সরবরাহ করে: আরডিডি (ফাংশনাল প্রোগ্রামিং, টাইপ নিরাপদ), ডেটাফ্রেম (রিলেশনাল মডেল, ক্যোরি অপটিম্যাজেশন, টংস্টেন এক্সিকিউশন, বাছাই করা এবং বদলানো)
এনকোডার: এনকোডার ব্যবহার সঙ্গে, এটা একটি ডেটাসেটের মধ্যে কোনো জেভিএম বস্তুর রূপান্তর করতে, Dataframe অসদৃশ উভয় গঠিত এবং আনস্ট্রাকচারড ডেটার সাথে কাজ করার জন্য ব্যবহারকারীদের অনুমতি সহজ।
প্রোগ্রামিং ল্যাঙ্গুয়েজ সমর্থিত: ডেটাসেটস এপিআই বর্তমানে কেবল স্কেলা এবং জাভাতে উপলব্ধ। পাইথন এবং আর বর্তমানে সংস্করণ 1.6 এ সমর্থিত নয়। পাইথন সমর্থন 2.0 সংস্করণ।
সুরক্ষা প্রকার: ডেটাসেটস এপিআই সংকলন সময় সুরক্ষা সরবরাহ করে যা ডেটাফ্রেমে পাওয়া যায় নি। নীচের উদাহরণে, আমরা দেখতে পাচ্ছি যে কীভাবে ডেটাসেট ডোমেন অবজেক্টগুলিতে কমপাইল ল্যাম্বদা ফাংশনগুলির সাথে পরিচালনা করতে পারে।
উদাহরণ:
case class Person(name : String , age : Int)
val personRDD = sc.makeRDD(Seq(Person("A",10),Person("B",20)))
val personDF = sqlContext.createDataframe(personRDD)
val ds:Dataset[Person] = personDF.as[Person]
ds.filter(p => p.age > 25)
ds.filter(p => p.salary > 25)
// error : value salary is not a member of person
ds.rdd // returns RDD[Person]
উদাহরণ:
ds.select(col("name").as[String], $"age".as[Int]).collect()
পাইথন এবং আর এর জন্য সমর্থন নেই: প্রকাশের ১.6 হিসাবে, ডেটাসেটগুলি কেবল স্কেলা এবং জাভা সমর্থন করে। পাইথন সমর্থন স্পার্ক ২.০ এ উপস্থাপন করা হবে।
ডেটাসেটস এপিআই বিদ্যমান আরডিডি এবং ডেটাফ্রেম এপিআই এর সাথে আরও ভাল সুবিধাগুলি নিয়ে আসে যাতে আরও ভাল ধরণের সুরক্ষা এবং কার্যকরী প্রোগ্রামিং থাকে the
Dataset
লিনকুই নয় এবং ল্যাম্বডা এক্সপ্রেশনটি এক্সপ্রেশন ট্রি হিসাবে ব্যাখ্যা করা যায় না। অতএব, সেখানে কালো বাক্স রয়েছে, এবং আপনি সর্বোত্তমভাবে (সমস্ত না থাকলে) অপ্টিমাইজার সুবিধাগুলি looseিলা করুন। সম্ভাব্য ডাউনসাইডগুলির কেবলমাত্র একটি ছোট উপসেট: 2.0 ফ্যাশন বনাম ডেটাফ্রেম স্পার্ক করুন । এছাড়াও, কেবলমাত্র আমি একাধিকবার বলেছি এমন কিছু পুনরাবৃত্তি করতে - সাধারণভাবে শেষ প্রান্তে টাইপ চেক করা Dataset
API এর মাধ্যমে সম্ভব নয় । যোগদানগুলি কেবল সর্বাধিক বিশিষ্ট উদাহরণ।
RDD
RDD
সমান্তরালে কাজ করা যায় এমন উপাদানগুলির একটি ফল্ট-সহনশীল সংগ্রহ।
DataFrame
DataFrame
নামযুক্ত কলামগুলিতে সংগঠিত একটি ডেটাসেট। এটি ধারণামূলকভাবে একটি রিলেশনাল ডাটাবেসের একটি টেবিলে বা আর / পাইথনের ডেটা ফ্রেমের সমতুল্য তবে হুডের অধীনে আরও সমৃদ্ধ আশাবাদী ।
Dataset
Dataset
ডেটা বিতরণ সংগ্রহ। স্পার্ক ১.6 এ ডেটাসেট যুক্ত একটি নতুন ইন্টারফেস যা স্পার্ক এসকিউএল এর অপ্টিমাইজড এক্সিকিউশন ইঞ্জিনের সুবিধা সহ আরডিডি (শক্তিশালী টাইপিং, শক্তিশালী ল্যাম্বদা ফাংশনগুলি ব্যবহারের ক্ষমতা) সরবরাহ করে ।
বিঃদ্রঃ:
Dataset[Row]
স্কালা / জাভাতে সারিগুলির ডাটাসেট ( ) প্রায়শই ডেটাফ্রেম হিসাবে উল্লেখ করবে ।
Nice comparison of all of them with a code snippet.
প্রশ্ন: আপনি কি আরডিডির মতো অন্যকে ডেটাফ্রেমে রূপান্তর করতে পারেন বা তদ্বিপরীত করতে পারেন?
1. RDD
করার DataFrame
সঙ্গে.toDF()
val rowsRdd: RDD[Row] = sc.parallelize(
Seq(
Row("first", 2.0, 7.0),
Row("second", 3.5, 2.5),
Row("third", 7.0, 5.9)
)
)
val df = spark.createDataFrame(rowsRdd).toDF("id", "val1", "val2")
df.show()
+------+----+----+
| id|val1|val2|
+------+----+----+
| first| 2.0| 7.0|
|second| 3.5| 2.5|
| third| 7.0| 5.9|
+------+----+----+
আরও উপায়: একটি আরডিডি অবজেক্টকে স্পার্কের ডেটাফ্রেমে রূপান্তর করুন
2. DataFrame
/ DataSet
থেকে RDD
সঙ্গে .rdd()
পদ্ধতি
val rowsRdd: RDD[Row] = df.rdd() // DataFrame to RDD
কারণ DataFrame
দুর্বলভাবে টাইপ করা হয়েছে এবং বিকাশকারীরা টাইপ সিস্টেমের সুবিধা পাচ্ছেন না। উদাহরণস্বরূপ, আসুন আপনি এসকিউএল থেকে কিছু পড়তে চান এবং এটিতে কিছু সমষ্টি চালাতে চান বলে দিন:
val people = sqlContext.read.parquet("...")
val department = sqlContext.read.parquet("...")
people.filter("age > 30")
.join(department, people("deptId") === department("id"))
.groupBy(department("name"), "gender")
.agg(avg(people("salary")), max(people("age")))
আপনি যখন বলেন people("deptId")
, আপনি কোনও Int
, বা ক ফিরে পাচ্ছেন না Long
, আপনি যে কোনও Column
বস্তু পরিচালনা করতে হবে তা ফিরে পেয়ে যাচ্ছেন । স্কালার মতো সমৃদ্ধ ধরণের সিস্টেমের ভাষায়, আপনি সমস্ত ধরণের সুরক্ষা হারাবেন যা সংকলন সময়ে আবিষ্কার করা যেতে পারে এমন জিনিসগুলির জন্য রান-টাইম ত্রুটির সংখ্যা বাড়িয়ে তোলে।
বিপরীতে, DataSet[T]
টাইপ করা হয়। যখন তুমি কর:
val people: People = val people = sqlContext.read.parquet("...").as[People]
আপনি আসলে কোনও People
বস্তু ফিরে পেয়ে যাচ্ছেন , যেখানে deptId
আসল অবিচ্ছেদ্য টাইপ এবং কলামের ধরণ নয়, সুতরাং টাইপ সিস্টেমটির সুবিধা গ্রহণ করছেন।
স্পার্ক ২.০ হিসাবে, ডেটাফ্রেম এবং ডেটাসেট এপিআইগুলি একীভূত করা DataFrame
হবে , যেখানে এর জন্য টাইপ উপকরণ হবে DataSet[Row]
।
DataFrame
ছিল এপিআই পরিবর্তনগুলি ভঙ্গ করা। যাইহোক, শুধু এটি নির্দেশ করতে চেয়েছিলেন। আমার সম্পাদনা এবং upvote জন্য ধন্যবাদ।
কেবল RDD
মূল উপাদান, তবে DataFrame
স্পার্ক ১.৩০ তে প্রবর্তিত একটি এপিআই।
তথ্যের পার্টিশন সংগ্রহ বলা হয় RDD
। এগুলি RDD
অবশ্যই কয়েকটি বৈশিষ্ট্য অনুসরণ করবে:
এখানে RDD
হয় কাঠামোগত বা কাঠামোগত হয়।
DataFrame
স্কেলা, জাভা, পাইথন এবং আর এ উপলব্ধ একটি এপিআই It এটি কোনও ধরণের স্ট্রাকচার্ড এবং আধা কাঠামোগত ডেটা প্রক্রিয়া করতে দেয়। সংজ্ঞায়িত করতে DataFrame
, নামযুক্ত কলামগুলিতে সংগঠিত বিতরণ করা ডেটার সংকলন DataFrame
। আপনি সহজেই নিখুত করতে RDDs
মধ্যে DataFrame
। আপনি একবারে JSON ডেটা, parquet ডেটা, HiveQL ডেটা ব্যবহার করে প্রক্রিয়া করতে পারেন DataFrame
।
val sampleRDD = sqlContext.jsonFile("hdfs://localhost:9000/jsondata.json")
val sample_DF = sampleRDD.toDF()
এখানে নমুনা_ডিএফ হিসাবে বিবেচনা করুন DataFrame
। sampleRDD
is (কাঁচা তথ্য) বলা হয় RDD
।
বেশিরভাগ উত্তর সঠিক হয় কেবল একটি পয়েন্ট এখানে যুক্ত করতে চান
স্পার্ক ২.০ এ দুটি এপিআই (ডেটাফ্রেম + ডেটাসেট) একক এপিআইতে একত্রিত হবে।
"ডাটাফ্রেম এবং ডেটাসেট একীকরণ: স্কেলা এবং জাভাতে ডেটাফ্রেম এবং ডেটাসেট একীভূত করা হয়েছে, অর্থাৎ ডাটাফ্রেম হ'ল রো এর ডেটাসেটের জন্য কেবল একটি টাইপ উলাম। পাইথন এবং আর-তে, টাইপ সুরক্ষার অভাবের কারণে ডেটাফ্রেমই মূল প্রোগ্রামিং ইন্টারফেস।"
ডাটাসেটগুলি আরডিডি-র অনুরূপ, তবে, জাভা সিরিয়ালাইজেশন বা ক্রাইও ব্যবহার না করে তারা নেটওয়ার্কে প্রক্রিয়াকরণ বা সংক্রমণ করার জন্য বস্তুগুলিকে সিরিয়ালাইজ করতে একটি বিশেষায়িত এনকোডার ব্যবহার করে।
স্পার্ক এসকিউএল বিদ্যমান আরডিডিগুলিকে ডেটাসেটগুলিতে রূপান্তর করার জন্য দুটি পৃথক পদ্ধতি সমর্থন করে। প্রথম পদ্ধতিটি একটি আরডিডি এর স্কিমা অনুমান করতে প্রতিবিম্ব ব্যবহার করে যাতে নির্দিষ্ট ধরণের অবজেক্ট থাকে। এই প্রতিবিম্ব ভিত্তিক পদ্ধতির আরও সংক্ষিপ্ত কোড বাড়ে এবং আপনার স্পার্ক অ্যাপ্লিকেশনটি লেখার সময় আপনি যখন ইতিমধ্যে স্কিমাটি জানেন তখন ভাল কাজ করে।
ডেটাসেট তৈরির দ্বিতীয় পদ্ধতিটি একটি প্রোগ্রাম্যাটিক ইন্টারফেসের মাধ্যমে যা আপনাকে স্কিমা তৈরি করতে এবং তারপরে এটি কোনও বিদ্যমান আরডিডিতে প্রয়োগ করতে পারে। যদিও এই পদ্ধতিটি আরও ভার্বোজ, এটি কলাম এবং তাদের ধরণের রানটাইম অবধি জানা না থাকলে এটি আপনাকে ডেটাসেটগুলি তৈরি করতে দেয়।
এখানে আপনি ডেটা ফ্রেমের কথোপকথনের উত্তর থেকে আরডিডি খুঁজে পেতে পারেন
একটি ডেটাফ্রেম আরডিবিএমএসের একটি টেবিলের সমতুল্য এবং আরডিডিগুলিতে "দেশীয়" বিতরণ সংগ্রহে অনুরূপ উপায়ে হেরফের করা যায়। আরডিডি থেকে পৃথক, ডেটাফ্রেমগুলি স্কিমাটি ট্র্যাক করে এবং বিভিন্ন রিলেশনাল অপারেশনগুলিকে সমর্থন করে যা আরও অনুকূলিতকরণ কার্যকর করার দিকে পরিচালিত করে। প্রতিটি ডেটা ফ্রেম অবজেক্ট যৌক্তিক পরিকল্পনার প্রতিনিধিত্ব করে তবে তাদের "অলস" প্রকৃতির কারণে ব্যবহারকারী নির্দিষ্ট "আউটপুট ক্রিয়াকলাপ" না বললে কোনও কার্যকর হয় না।
আমি আসা করি এটা সাহায্য করবে!
একটি ডেটাফ্রেম হ'ল সারি বস্তুর একটি আরডিডি, প্রতিটি রেকর্ড উপস্থাপন করে। একটি ডেটাফ্রেমও এর সারিগুলির স্কিমা (অর্থাত্ ডেটা ক্ষেত্রগুলি) জানে। ডেটাফ্রেমগুলি নিয়মিত আরডিডি-র মতো দেখায়, অভ্যন্তরীণভাবে তারা তাদের স্কিমার সুবিধা গ্রহণ করে আরও কার্যকর পদ্ধতিতে ডেটা সঞ্চয় করে। এছাড়াও, তারা আরডিডিগুলিতে যেমন এসকিউএল কোয়েরি চালানোর ক্ষমতা উপলব্ধ না করে এমন নতুন ক্রিয়াকলাপ সরবরাহ করে। ডাটাফ্রেমগুলি বাহ্যিক ডেটা উত্স থেকে, প্রশ্নের ফলাফলগুলি থেকে বা নিয়মিত আরডিডি থেকে তৈরি করা যেতে পারে।
রেফারেন্স: জহরিয়া এম, ইত্যাদি। শেখা স্পার্ক (ও'রিলি, ২০১৫)
Spark RDD (resilient distributed dataset)
:
আরডিডি হ'ল মূল ডেটা বিমূর্ততা এপিআই এবং স্পার্কের প্রথম প্রকাশের (স্পার্ক 1.0) থেকে পাওয়া যায়। এটি ডেটা বিতরণ করা ডেটা সংগ্রহ করার জন্য নিম্ন স্তরের এপিআই। আরডিডি এপিআইগুলি কয়েকটি অত্যন্ত কার্যকর পদ্ধতি প্রকাশ করে যা অন্তর্নিহিত শারীরিক ডেটা কাঠামোর উপর খুব শক্ত নিয়ন্ত্রণ পেতে ব্যবহার করা যেতে পারে। এটি বিভিন্ন মেশিনে বিতরণ করা পার্টিশনযুক্ত ডেটাগুলির একটি অপরিবর্তনীয় (কেবল পঠনযোগ্য) সংগ্রহ। আরডিডি বড় ক্লাস্টারে মেমরির গণনা সক্ষম করে যাতে ত্রুটি সহনশীল পদ্ধতিতে বড় ডেটা প্রসেসিংয়ে গতি বাড়ায়। ফল্ট সহনশীলতা সক্ষম করতে, আরডিডি ড্যাগ (ডাইরেক্টেড অ্যাসাইক্লিক গ্রাফ) ব্যবহার করে যা শীর্ষে এবং প্রান্তগুলির একটি সেট নিয়ে গঠিত। ডিএজি-তে উল্লম্ব এবং প্রান্তগুলি যথাক্রমে আরডিডি এবং অপারেশনটিকে সেই আরডিডিতে প্রয়োগ করতে হবে। আরডিডি-তে সংজ্ঞায়িত রূপান্তরগুলি অলস এবং যখন কোনও অ্যাকশন ডাকা হয় তখনই সম্পাদন করে
Spark DataFrame
:
স্পার্ক 1.3 দুটি নতুন ডেটা বিমূর্ততা API- ডেটাফ্রেম এবং ডেটাসেট প্রবর্তন করেছে। ডেটাফ্রেম এপিআইগুলি নামযুক্ত কলামগুলিতে সম্পর্কিত ডাটাবেসে একটি টেবিলের মতো ডেটা সংগঠিত করে। এটি প্রোগ্রামারদের ডেটা বিতরণের সংগ্রহের জন্য স্কিমা সংজ্ঞা দিতে সক্ষম করে। ডাটাফ্রেমের প্রতিটি সারি অবজেক্ট টাইপের সারি। এসকিউএল টেবিলের মতো, প্রতিটি কলামে একটি ডেটা ফ্রেমে একই সংখ্যক সারি থাকতে হবে। সংক্ষেপে, ডেটাফ্রেমটি আলস্যভাবে মূল্যায়ন করা পরিকল্পনা যা ডেটা বিতরণকৃত সংগ্রহের ক্ষেত্রে অপারেশনগুলি সম্পাদন করা প্রয়োজন তা নির্দিষ্ট করে। ডেটাফ্রেমও একটি অপরিবর্তনীয় সংগ্রহ।
Spark DataSet
:
ডেটাফ্রেম এপিআইগুলিকে এক্সটেনশন হিসাবে স্পার্ক 1.3 ডেটাসেট এপিআইও চালু করেছিল যা স্পার্কে কঠোরভাবে টাইপ করা এবং অবজেক্ট-ভিত্তিক প্রোগ্রামিং ইন্টারফেস সরবরাহ করে provides এটি অপরিবর্তনীয়, বিতরণ করা ডেটার টাইপ-নিরাপদ সংগ্রহ। ডেটাফ্রেমের মতো ডেটাসেট এপিআইগুলি এক্সিকিউশন অপটিমাইজেশন সক্ষম করতে ক্যাটালিস্ট ইঞ্জিনও ব্যবহার করে। ডেটাসেট হ'ল ডেটা ফ্রেম এপিআই-তে একটি এক্সটেনশন।
Other Differences
-
একজন DataFrame একটি RDD একটি স্কিমা রয়েছে। আপনি এটিকে একটি সম্পর্কিত ডেটাবেস টেবিল হিসাবে ভাবতে পারেন, এতে প্রতিটি কলামের একটি নাম এবং একটি পরিচিত প্রকার রয়েছে। শক্তি DataFrames সত্য যে, যখন আপনি একটি কাঠামোবদ্ধ ডেটা সেটটি (JSON, Parquet ..) থেকে একটি DataFrame তৈরি, স্পার্ক (JSON, Parquet ..) ডেটা সেটটি যে সম্পূর্ণ উপর একটি পাস করে একটি স্কিমা অনুমান করতে সক্ষম হয় থেকে আসে বোঝা হচ্ছে। তারপরে, এক্সিকিউশন প্ল্যান গণনা করার সময়, স্পার্ক স্কিমা ব্যবহার করতে এবং যথেষ্ট পরিমাণে আরও ভাল গণনা অপ্টিমাইজেশন করতে পারে। লক্ষ্য করুন DataFrame স্পার্ক v1.3.0 তে হওয়া সামনে SchemaRDD বলা হত
স্পার্ক আরডিডি -
একটি আরডিডি হ'ল রিসিলেন্ট ডিস্ট্রিবিউটড ডেটাসেটস। এটি রেকর্ডের কেবল পঠনযোগ্য পার্টিশন সংগ্রহ। আরডিডি স্পার্কের মৌলিক ডেটা স্ট্রাকচার। এটি একটি প্রোগ্রামারকে একটি দোষ-সহনশীল পদ্ধতিতে বৃহত ক্লাস্টারে মেমরির গণনা সম্পাদনের অনুমতি দেয়। সুতরাং, টাস্ক দ্রুত।
স্পার্ক ডেটাফ্রেম -
একটি আরডিডি থেকে পৃথক, নামযুক্ত কলামগুলিতে ডেটা সংগঠিত। উদাহরণস্বরূপ একটি সম্পর্কিত ডাটাবেসে একটি সারণী। এটি একটি অপরিবর্তনীয় বিতরণ করা ডেটা সংগ্রহ। স্পার্কে ডেটা ফ্রেম বিকাশকারীদের উচ্চতর স্তরের বিমূর্ততা মঞ্জুর করে ডেটা বিতরণের সংগ্রহের উপরে কাঠামো চাপিয়ে দেওয়ার অনুমতি দেয়।
স্পার্ক ডেটাসেট -
অ্যাপাচি স্পার্কে ডেটাসেটগুলি ডেটাফ্রেম এপিআই-এর একটি এক্সটেনশন যা টাইপ-সেফ, অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ইন্টারফেস সরবরাহ করে। ডেটাসেট একটি ক্যোয়ার পরিকল্পনাকারীর কাছে এক্সপ্রেশন এবং ডেটা ক্ষেত্রগুলি প্রকাশ করে স্পার্কের অনুঘটক অপ্টিমাইজারের সুবিধা গ্রহণ করে।
সমস্ত দুর্দান্ত উত্তর এবং প্রতিটি এপিআই ব্যবহার করে কিছুটা বাণিজ্য বন্ধ রয়েছে। প্রচুর সমস্যা সমাধানের জন্য ডেটাসেটটি সুপার এপিআই হিসাবে নির্মিত হয়েছে তবে আপনি যদি আপনার ডেটা বোঝেন তবে অনেক সময় আরডিডি সবচেয়ে ভাল কাজ করে এবং প্রসেসিং অ্যালগরিদম যদি একক পাসে প্রচুর পরিমাণে ডেটাতে উন্নত করে তবে আরডিডি সেরা বিকল্প বলে মনে হয়।
ডেটাসেট এপিআই ব্যবহার করে সমষ্টি এখনও মেমরি গ্রাস করে এবং সময়ের সাথে সাথে আরও ভাল হবে।