পাইথন এবং স্কালা ব্যবহার করার সময় স্পার্কের পারফরম্যান্সের তুলনা করতে আমি উভয় ভাষায় একই কাজ তৈরি করেছি এবং রানটাইম তুলনা করেছি। আমি উভয় চাকরিই প্রায় একই পরিমাণে সময় নেওয়ার প্রত্যাশা করেছিল, তবে পাইথন 27min
চাকরীটি কেবল গ্রহণ করেছিল , যখন স্কালার কাজটি 37min
(প্রায় ৪০% বেশি সময়!) নিয়েছিল । আমি জাভাতেও একই কাজটি প্রয়োগ করেছি এবং এটিও গ্রহণ 37minutes
করেছে। পাইথন এত দ্রুত যে কীভাবে সম্ভব?
ন্যূনতম যাচাইযোগ্য উদাহরণ:
পাইথনের কাজ:
# Configuration
conf = pyspark.SparkConf()
conf.set("spark.hadoop.fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider")
conf.set("spark.executor.instances", "4")
conf.set("spark.executor.cores", "8")
sc = pyspark.SparkContext(conf=conf)
# 960 Files from a public dataset in 2 batches
input_files = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312025.20/warc/CC-MAIN-20190817203056-20190817225056-00[0-5]*"
input_files2 = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312128.3/warc/CC-MAIN-20190817102624-20190817124624-00[0-3]*"
# Count occurances of a certain string
logData = sc.textFile(input_files)
logData2 = sc.textFile(input_files2)
a = logData.filter(lambda value: value.startswith('WARC-Type: response')).count()
b = logData2.filter(lambda value: value.startswith('WARC-Type: response')).count()
print(a, b)
স্কাল কাজ:
// Configuration
config.set("spark.executor.instances", "4")
config.set("spark.executor.cores", "8")
val sc = new SparkContext(config)
sc.setLogLevel("WARN")
sc.hadoopConfiguration.set("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider")
// 960 Files from a public dataset in 2 batches
val input_files = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312025.20/warc/CC-MAIN-20190817203056-20190817225056-00[0-5]*"
val input_files2 = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312128.3/warc/CC-MAIN-20190817102624-20190817124624-00[0-3]*"
// Count occurances of a certain string
val logData1 = sc.textFile(input_files)
val logData2 = sc.textFile(input_files2)
val num1 = logData1.filter(line => line.startsWith("WARC-Type: response")).count()
val num2 = logData2.filter(line => line.startsWith("WARC-Type: response")).count()
println(s"Lines with a: $num1, Lines with b: $num2")
কেবল কোডটি দেখে তারা দেখতে অভিন্ন বলে মনে হচ্ছে। আমি একটি ডিএজিগুলি দেখেছি এবং তারা কোনও অন্তর্দৃষ্টি দেয় নি (বা তাদের উপর ভিত্তি করে ব্যাখ্যা দিয়ে কীভাবে আসতে হবে তা সম্পর্কে আমার জানা-জ্ঞানের অভাব রয়েছে)।
আমি সত্যিই কোন পয়েন্টার প্রশংসা করব।