أپاتشي سپارك

(تم التحويل من Apache Spark)
Apache Spark
Spark Logo
المؤلف الأصليMatei Zaharia
المطوّرApache Spark
الإطلاق المبدئي26 مايو 2014; منذ 10 سنين (2014-05-26
الإصدار المستقر
3.0.1 / 2 أكتوبر 2020; منذ 4 سنين (2020-10-02
المستودعSpark Repository
وضع التطويرActive
مكتوب بلغةScala[1]
نظام التشغيلMicrosoft Windows, macOS, Linux
متاح فيScala, Java, SQL, Python, R, C#, F#
النوعData analytics, machine learning algorithms
الرخصةApache License 2.0
الموقع الإلكترونيspark.apache.org Edit this at Wikidata

أپاتشي سپارك Apache Spark هو محرك تحليلات موحد مفتوح المصدر لمعالجة البيانات على نطاق واسع. يوفر سپارك الواجهة لبرمجة مجموعات كاملة مع توازي البيانات ضمني و تفاوت الخطأ. تم تطوير قاعدة رموز سپارك في الأصل في جامعة كاليفورنيا، بركلي AMPLab، ثم تم التبرع به لاحقاً إلى مؤسسة أپاتشي للبرمجيات، والتي حافظت عليه منذ ذلك الحين.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

نظرة عامة

تتمتع أپاتشي سپارك بأساسها البنيوي في مجموعة البيانات الموزعة المرنة (RDD)، وهي عبارة عن مجموعة متعددة لعناصر البيانات الموزعة على مجموعة من الآلات، والتي يتم الاحتفاظ بها بطريقة متسامحة مع الأخطاء.[2]تم إصدار إطار بيانات API كتجريد فوق RDD، متبوعاً بواجهة مجموعة البيانات API. في سپارك 1.x، كان RDD هو واجهة برمجة التطبيقات (API) الأساسي، ولكن اعتباراً من سپارك 2.x يتم تشجيع استخدام مجموعة بيانات API[3] على الرغم من أن واجهة برمجة تطبيقات RDD غير مهملة.[4][5] لا تزال تقنية RDD تشكل أساس واجهة برمجة تطبيقات مجموعة البيانات.[6][7]

تم تطوير سپارك و RDDs الخاصة به في عام 2012 استجابةً للقيود الموجودة في نموذج الحوسبة العنقودية MapReduce، والتي يفرض بنية تدفق البيانات الخطية الخاصة على البرامج الموزعة: تقرأ برامج MapReduce بيانات الإدخال من القرص، تعيين دالة عبر البيانات، تقليل نتائج المخطط، وتخزين نتائج التخفيض على القرص. تعمل RDDs الخاصة بشركة سپارك باعتبارها مجموعة عمل للبرامج الموزعة التي تقدم شكلاً مقيداً (عن عمد) من الذاكرة المشتركة.[8]

تسهل سپارك تنفيذ كل من الخوارزمية التكرارية، والتي تزور مجموعة البيانات الخاصة بهم عدة مرات في حلقة، أي الاستعلام المتكرر عن البيانات على غرار قاعدة البيانات. قد يتم تقليل الكمون لمثل هذه التطبيقات بعدة أوامر من حيث الحجم مقارنةً أپاتشي هادوپ بتنفيذ MapReduce.[2][9]من بين فئة الخوارزميات التكرارية خوارزميات التدريب لأنظمة التعلم الآلي، والتي شكلت الدافع الأولي لتطوير أپاتشي سپارك.[10]

تتطلب أپاتشي سپارك مدير كتلة عنقودية و نظام تخزين موزع. لإدارة المجموعة، يدعم سپارك قائمة بذاتها (مجموعة سپارك الأصلية، حيث يمكنك تشغيل مجموعة إما يدوياً أو استخدام البرامج النصية للتشغيل التي توفرها حزمة التثبيت. ومن الممكن أيضاً تشغيل هذه البرامج المساعدة على جهاز واحد للاختبار)، هادوپ YARN، أپاتشي ميسس أو كوبرنتيس [11]للتخزين الموزع، يمكن لـ سپارك التفاعل مع مجموعة متنوعة، بما في ذلك ألوكسيو، نظام الملفات الموزعة هادوپ (HDFS)،[12] MapR نظام ملفات (MapR-FS)،[13] كساندرا،[14] أوپن ستاك سويفت، أمازون S3، كودو، نظام ملفات لستر،[15]أو حل مخصص يمكن تنفيذه. يدعم سپارك أيضاً الوضع المحلي شبه-الموزع، وعادة ما يستخدم فقط لأغراض التطوير أو الاختبار، حيث لا يكون التخزين الموزع مطلوباً ويمكن استخدام نظام الملفات المحلي بدلاً من ذلك؛ في مثل هذا السيناريو، يتم تشغيل سپارك على جهاز واحد مع منفذ واحد لكل نواة وحدة معالجة مركزية.


سپارك كور

سپارك كور هو أساس المشروع ككل. يوفر إرسال المهام الموزعة والجدولة ووظائف I/O الأساسية، والتي يتم عرضها من خلال واجهة برمجة التطبيق (لـ جاڤا، ‌پايثون، سكالا، .NET[16]و R) التي تتمحور حول تجريد RDD (تتوفر واجهة برمجة تطبيقات جاڤا للغات JVM الأخرى، ولكنها أيضًا قابلة للاستخدام لبعض اللغات الأخرى غير JVM والتي يمكنها الاتصال بـ JVM، مثل جوليا[17]).تعكس هذه الواجهة نموذج برمجة وظيفية / عالية المستوى: يستدعي برنامج "محرك" عمليات متوازية مثل الخريطة أو المخطط، مرشح أو التقليل من RDD عن طريق تمرير دالة إلى سپارك، والتي تقوم بعد ذلك بجدولة تنفيذ الدالة الوظيفية بالتوازي على الكتلة العنقودية. [2] هذه العمليات، وعمليات إضافية مثل الروابط، واتخاذ RDDs كمدخلات وإنتاج RDDs جديدة. RDDs هي غير قابل للتغيير وعملياتها بطيئة ؛ يتم تحقيق التسامح مع الخطأ من خلال تتبع "النسب" لكل RDD (تسلسل العمليات التي أنتجت ذلك) بحيث يمكن إعادة بنائه في حالة فقدان البيانات. يمكن أن تحتوي RDDs على أي نوع من مواد پايثون أو .NET أو جاڤا أو سكالا.

إلى جانب النمط الوظيفي الموجه نحو RDD للبرمجة، توفر سپارك شكلين مقيدين من المتغيرات المشتركة: تشير متغيرات البث، إلى البيانات المرجعية للقراءة فقط يجب أن تكون متاحة على جميع العقد، بينما يمكن استخدام المجمعات لبرمجة الاختصارات أو الاختزالات بأسلوب حتمي. [2]

مثال نموذجي على البرمجة الوظيفية المتمحورة حول RDD هو برنامج سكالا التالي الذي يحسب ترددات جميع الكلمات التي تحدث في مجموعة من الملفات النصية ويطبع أكثرها شيوعاً. كل map، flatMap (متغير من map) و تقليل reduceByKey والتي تأخذ دالة مجهولة وتنفذ عملية بسيطة على عنصر بيانات واحد (أو زوج من العناصر)، وتطبق وسيطتها لتحويل RDD إلى RDD جديد.

val conf = new SparkConf().setAppName("wiki_test") // create a spark config object
val sc = new SparkContext(conf) // Create a spark context
val data = sc.textFile("/path/to/somedir") // Read files from "somedir" into an RDD of (filename, content) pairs.
val tokens = data.flatMap(_.split(" ")) // Split each file into a list of tokens (words).
val wordFreq = tokens.map((_, 1)).reduceByKey(_ + _) // Add a count of one to each token, then sum the counts per word type.
wordFreq.sortBy(s => -s._2).map(x => (x._2, x._1)).top(10) // Get the top 10 words. Swap word and count to sort by count.

سپارك إس كيو إل

سپارك إس كيو إل عبارة عن مكون فوق سپارك كور ويقوم بتقديم تجريداً للبيانات والذي يسمى بإطارات البيانات [أ]الذي يوفر دعماً منظماً و بيانات نصف منظمة. يوفر سپارك إس كيو إل لغة خاصة بالمجال (DSL) لمعالجة إطارات البيانات في سكالا، جاڤا، پايثون أو .NET.[16] كما يوفر دعم لغة إس كيو إل، مع واجهة خط الأوامر ومخدم ODBC / JDBC. على الرغم من افتقار إطارات البيانات إلى فحص نوع زمن الترجمة الذي توفره RDDs، اعتباراً من سپارك 2.0، فإن مجموعة البينات المكتوبة بقوة مدعومة بالكامل بواسطة سپارك إس كيو إل أيضاً.

import org.apache.spark.sql.SparkSession

val url = "jdbc:mysql://yourIP:yourPort/test?user=yourUsername;password=yourPassword" // URL for your database server.
val spark = SparkSession.builder().getOrCreate() // Create a Spark session object

val df = spark
  .read
  .format("jdbc")
  .option("url", url)
  .option("dbtable", "people")
  .load()

df.printSchema() // Looks the schema of this DataFrame.
val countsByAge = df.groupBy("age").count() // Counts people by age

//or alternatively via SQL:
//df.createOrReplaceTempView("people")
//val countsByAge = spark.sql("SELECT age, count(*) FROM people GROUP BY age")

سپارك ستريمنگ

تستخدم سپارك ستريمنگ قدرةسپارك كور على الجدولة السريعة لأداء تحليلات التدفق. وتستوعب البيانات على دفعات صغيرة وتقوم بإجراء تحويلات RDD على تلك المجموعات الصغيرة من البيانات. يتيح هذا التصميم استخدام نفس مجموعة التعليمات البرمجية للتطبيق المكتوبة لتحليلات الدُفعات في تدفق التحليلات، مما يسهل تنفيذ بنية لامدا.[19][20]ومع ذلك، تأتي هذه الملاءمة مع جزاء كمون تساوي مدة الدفعة المصغرة. تتضمن محركات البيانات المتدفقة الأخرى التي تعالج حدثاً على حدة بدلاً من دفعات صغيرة ستورم ومكون التدفق في فلِنك.[21] يحتوي سپارك ستريمنگ على دعم مدمج للاستهلاك من كافكا، فلوم، تويتر، ZeroMQ، كنسس و مقبس TCP / IP .[22]

في سپارك 2.x، يتم أيضاً توفير تقنية منفصلة تعتمد على مجموعات البيانات، تسمى التدفق المهيكل، والتي لها واجهة ذات مستوى أعلى لدعم البث.[23]

يمكن نشر سپارك في مركز بيانات محلي وكذلك سحابياً.

مكتبة التعلم الآلي MLlib

سپارك MLlib عبارة عن إطار عمل للتعلم الآلي الموزع فوق سپارك كور، والذي يرجع في جزء كبير منه إلى بنية سپارك المستندة إلى الذاكرة الموزعة، وهو أسرع بتسعة أضعاف من التنفيذ المستند إلى القرص مستخدم بواسطة أپاتشي ماهوت (وفقاً للمعايير التي قام بها مطورو MLlib مقابل تطبيقات تبديل المربعات الصغرى (ALS)، وقبل أن يحصل ماهوت نفسه على واجهة سپارك)، و المقاييس أفضل من ڤاوپال وابت.[24] تم تنفيذ العديد من خوارزميات تعلم الآلة والخوارزميات الإحصائية الشائعة وتم شحنها مع MLlib الذي يبسط خطوط أنابيب التعلم الآلي على نطاق واسع، بما في ذلك:

گرافX

گرافX عبارة عن إطار عمل لمعالجة الرسم البياني موزع أعلى أپاتشي سپارك. نظراً لأنها تستند إلى RDDs، وهي غير قابلة للتغيير، فإن الرسوم البيانية غير قابلة للتغيير وبالتالي فإن گرافX غير مناسبة للرسوم البيانية التي تحتاج إلى التحديث، ناهيك عن طريقة المعاملات مثل قاعدة بيانات الرسم البياني.[26]توفر گرافX واجهتي API منفصلين لتنفيذ خوارزميات متوازية بشكل كبير (مثل PageRank): تجريد Pregel، وواجهة برمجة تطبيقات أكثر عمومية على غرار MapReduce.[27]على عكس سابقتها Bagel، الذي تم إهماله رسمياً في سپارك 1.6، تتمتع گرافX بالدعم الكامل للرسوم البيانية للعقارات (الرسوم البيانية حيث يمكن ربط الممتلكات بالحواف والرؤوس).[28]

يمكن اعتبار گرافX على أنها إصدار سپارك في الذاكرة من أپاتشي سپارك، والذي استخدم برنامج MapReduce المستند إلى قرص هادوپ.[29]

مثل أپاتشي سپارك، بدأت گرافX في البداية كمشروع بحثي في AMPLab و Databricks بجامعة كاليفورنيا في بركلي، وتم التبرع بها لاحقاً لمؤسسة برمجيات أپاتشي سپارك ومشروع سپارك[30]

لغات داعمة

تحتوي أپاتشي سپارك على دعم مدمج لـ سكالا و جاڤا و R وپايثون مع دعم جهة خارجية للغات .net ،[31] جوليا،[32] وأكثر.

تاريخ

بدأ سپارك مبدئياً بواسطة ماتي زاهريا في AMPLab بجامعة كاليفورنيا في بركلي في عام 2009، وفتح المصدر في عام 2010 بموجب رخصة BSD.[33]

في عام 2013، تم التبرع بالمشروع لمؤسسة برمجيات أپاتشي وحوّل ترخيصه إلى أپاتشي 2.0. في فبراير 2014، أصبحت سپارك مشروع أپاتشي عالي المستوى.[34]

في نوفمبر 2014، سجلت شركة مؤسس سپارك إم زاهريا. زاهريا Databricks رقماً قياسياً عالمياً جديداً في التصنيف على نطاق واسع باستخدام سپارك.[35][33]

كان لدى سپارك أكثر من 1000 مساهم في عام 2015،[36] مما يجعله أحد أكثر المشاريع نشاطاً في مؤسسة أپاتشي سپارك[37] وواحد من أكثر مشاريع البيانات الضخمة نشاطاً مفتوح المصدر.

الإصدار تاريخ الإطلاق الأصلي آخر إصدار تاريخ الإطلاق
Old version, no longer maintained: 0.5 2012-06-12 0.5.1 2012-10-07
Old version, no longer maintained: 0.6 2012-10-14 0.6.2 2013-02-07
Old version, no longer maintained: 0.7 2013-02-27 0.7.3 2013-07-16
Old version, no longer maintained: 0.8 2013-09-25 0.8.1 2013-12-19
Old version, no longer maintained: 0.9 2014-02-02 0.9.2 2014-07-23
Old version, no longer maintained: 1.0 2014-05-26 1.0.2 2014-08-05
Old version, no longer maintained: 1.1 2014-09-11 1.1.1 2014-11-26
Old version, no longer maintained: 1.2 2014-12-18 1.2.2 2015-04-17
Old version, no longer maintained: 1.3 2015-03-13 1.3.1 2015-04-17
Old version, no longer maintained: 1.4 2015-06-11 1.4.1 2015-07-15
Old version, no longer maintained: 1.5 2015-09-09 1.5.2 2015-11-09
Old version, no longer maintained: 1.6 2016-01-04 1.6.3 2016-11-07
Old version, no longer maintained: 2.0 2016-07-26 2.0.2 2016-11-14
Old version, no longer maintained: 2.1 2016-12-28 2.1.3 2018-06-26
Old version, no longer maintained: 2.2 2017-07-11 2.2.3 2019-01-11
Older version, yet still maintained: 2.3 2018-02-28 2.3.4 2019-09-09
Older version, yet still maintained: 2.4 LTS 2018-11-02 2.4.7 2020-10-12[38]
Current stable version: 3.0 2020-06-18 3.0.1 2020-10-02[39]
المفتاح:
نسخة قديمة
نسخة أقدم، ولكنها مازالت مصانة
أحدث نسخة
آخر نسخة بروفة
إطلاق مستقبلي


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

المطورون

تم تطوير أپاتشي ماهوت من قبل مجموعة. تدار المشروع من قبل مجموعة تسمى "لجنة إدارة المشروع" (PMC). PMC الحالي هوAaron Davidson, Andy Konwinski, Andrew Or, Ankur Dave, Robert Joseph Evans, DB Tsai, Dongjoon Hyun, Felix Cheung, Hyukjin Kwon, Haoyuan Li, Ram Sriharsha, Holden Karau, Herman van Hövell, Imran Rashid, Jason Dai, Joseph Kurata Bradley, Joseph E. Gonzalez, Josh Rosen, Jerry Shao, Kay Ousterhout, Cheng Lian, Xiao Li, Mark Hamstra, Michael Armbrust, Matei Zaharia, Xiangrui Meng, Nicholas Pentreath, Mosharaf Chowdhury, Mridul Muralidharan, Prashant Sharma, Patrick Wendell, Reynold Xin, Ryan LeCompte, Shane Huang, Shivaram Venkataraman, Sean McNamara, Sean R. Owen, Stephen Haberman, Tathagata Das, Thomas Graves, Thomas Dudziak, Takuya Ueshin, Marcelo Masiero Vanzin, Wenchen Fan, Charles Reiss, Andrew Xia, Yin Huai, Yanbo Liang, Shixiong Zhu.[40]

انظر أيضاً

ملاحظات

  1. ^ وقد سمي SchemaRDDs قبل سپارك 1.3[18]

الهامش

  1. ^ "Spark Release 2.0.0". MLlib in R: SparkR now offers MLlib APIs [..] Python: PySpark now offers many more MLlib algorithms"
  2. ^ أ ب ت ث "Spark: Cluster Computing with Working Sets" in USENIX Workshop on Hot Topics in Cloud Computing (HotCloud).. 
  3. ^ "Spark 2.2.0 Quick Start". apache.org. 2017-07-11. Retrieved 2017-10-19. we highly recommend you to switch to use Dataset, which has better performance than RDD
  4. ^ "Spark 2.2.0 deprecation list". apache.org. 2017-07-11. Retrieved 2017-10-10.
  5. ^ Damji, Jules (2016-07-14). "A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets: When to use them and why". databricks.com. Retrieved 2017-10-19.
  6. ^ Chambers, Bill (2017-08-10). "12". Spark: The Definitive Guide. O'Reilly Media. virtually all Spark code you run, where DataFrames or Datasets, compiles down to an RDD
  7. ^ "What is Apache Spark? Spark Tutorial Guide for Beginner". janbasktraining.com. 2018-04-13. Retrieved 2018-04-13.
  8. ^ (2010) "Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing" in USENIX Symp. Networked Systems Design and Implementation.. 
  9. ^ Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion (June 2013). "Shark: SQL and Rich Analytics at Scale" (PDF). arXiv:1211.6176. Bibcode:2012arXiv1211.6176X. {{cite journal}}: Cite journal requires |journal= (help); Unknown parameter |conference= ignored (help)
  10. ^ Harris, Derrick (28 June 2014). "4 reasons why Spark could jolt Hadoop into hyperdrive". Gigaom.
  11. ^ "Cluster Mode Overview - Spark 2.4.0 Documentation - Cluster Manager Types". apache.org. Apache Foundation. 2019-07-09. Retrieved 2019-07-09.
  12. ^ Figure showing Spark in relation to other open-source Software projects including Hadoop
  13. ^ MapR ecosystem support matrix
  14. ^ قالب:Cite mailing list
  15. ^ Wang, Yandong; Goldstone, Robin; Yu, Weikuan; Wang, Teng (May 2014). "Characterization and Optimization of Memory-Resident MapReduce on HPC Systems". 2014 IEEE 28th International Parallel and Distributed Processing Symposium. IEEE. pp. 799–808. doi:10.1109/IPDPS.2014.87. ISBN 978-1-4799-3800-1. S2CID 11157612.
  16. ^ أ ب dotnet/spark, .NET Platform, 2020-09-14, https://github.com/dotnet/spark, retrieved on 2020-09-14 
  17. ^ "GitHub - DFDX/Spark.jl: Julia binding for Apache Spark". 2019-05-24.
  18. ^ "Spark Release 1.3.0 | Apache Spark".
  19. ^ "Applying the Lambda Architecture with Spark, Kafka, and Cassandra | Pluralsight". www.pluralsight.com. Retrieved 2016-11-20.
  20. ^ Shapira, Gwen (29 August 2014). "Building Lambda Architecture with Spark Streaming". cloudera.com. Cloudera. Archived from the original on 14 June 2016. Retrieved 17 June 2016. re-use the same aggregates we wrote for our batch application on a real-time data stream
  21. ^ Chintapalli, Sanket; Dagit, Derek; Evans, Bobby; Farivar, Reza; Graves, Thomas; Holderbaugh, Mark; Liu, Zhuo; Nusbaum, Kyle; Patil, Kishorkumar; Peng, Boyang Jerry; Poulosky, Paul (May 2016). "Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming". 2016 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW). IEEE. pp. 1789–1792. doi:10.1109/IPDPSW.2016.138. ISBN 978-1-5090-3682-0. S2CID 2180634.
  22. ^ Kharbanda, Arush (17 March 2015). "Getting Data into Spark Streaming". sigmoid.com. Sigmoid (Sunnyvale, California IT product company). Archived from the original on 15 August 2016. Retrieved 7 July 2016.
  23. ^ Zaharia, Matei (2016-07-28). "Structured Streaming In Apache Spark: A new high-level API for streaming". databricks.com. Retrieved 2017-10-19.
  24. ^ Sparks, Evan; Talwalkar, Ameet (2013-08-06). "Spark Meetup: MLbase, Distributed Machine Learning with Spark". slideshare.net. Spark User Meetup, San Francisco, California. Retrieved 10 February 2014.
  25. ^ "MLlib | Apache Spark". spark.apache.org. Retrieved 2016-01-18.
  26. ^ Malak, Michael (14 June 2016). "Finding Graph Isomorphisms In GraphX And GraphFrames: Graph Processing vs. Graph Database". slideshare.net. sparksummit.org. Retrieved 11 July 2016.
  27. ^ Malak, Michael (1 July 2016). Spark GraphX in Action. Manning. p. 89. ISBN 9781617292521. Pregel and its little sibling aggregateMessages() are the cornerstones of graph processing in GraphX. ... algorithms that require more flexibility for the terminating condition have to be implemented using aggregateMessages()
  28. ^ Malak, Michael (14 June 2016). "Finding Graph Isomorphisms In GraphX And GraphFrames: Graph Processing vs. Graph Database". slideshare.net. sparksummit.org. Retrieved 11 July 2016.
  29. ^ Malak, Michael (1 July 2016). Spark GraphX in Action. Manning. p. 9. ISBN 9781617292521. Giraph is limited to slow Hadoop Map/Reduce
  30. ^ Gonzalez, Joseph; Xin, Reynold; Dave, Ankur; Crankshaw, Daniel; Franklin, Michael; Stoica, Ion (Oct 2014). "GraphX: Graph Processing in a Distributed Dataflow Framework" (PDF). {{cite journal}}: Cite journal requires |journal= (help); Unknown parameter |conference= ignored (help)
  31. ^ [1]
  32. ^ [2]
  33. ^ أ ب Clark, Lindsay. "Apache Spark speeds up big data decision-making". ComputerWeekly.com (in الإنجليزية البريطانية). Retrieved 2018-05-16.
  34. ^ "The Apache Software Foundation Announces Apache&#8482 Spark&#8482 as a Top-Level Project". apache.org. Apache Software Foundation. 27 February 2014. Retrieved 4 March 2014.
  35. ^ Spark officially sets a new record in large-scale sorting
  36. ^ Open HUB Spark development activity
  37. ^ "The Apache Software Foundation Announces Apache&#8482 Spark&#8482 as a Top-Level Project". apache.org. Apache Software Foundation. 27 February 2014. Retrieved 4 March 2014.
  38. ^ "Spark News". apache.org.
  39. ^ "Spark News". apache.org.
  40. ^ https://projects.apache.org/committee.html?spark

وصلات خارجية

الكلمات الدالة: