نظرة عامة على SparkR

SparkR هي حزمة R توفر واجهة أمامية خفيفة الوزن لاستخدام Apache Spark من R. يدعم SparkR أيضا التعلم الآلي الموزع باستخدام MLlib.

مرجع دالة SparkR

يمكنك العثور على أحدث مرجع دالة SparkR على spark.apache.org.

يمكنك أيضا عرض تعليمات الدالة في دفاتر ملاحظات R أو RStudio بعد استيراد حزمة SparkR.

وثائق R المضمنة

SparkR في دفاتر الملاحظات

  • بالنسبة إلى Spark 2.0 والإصدارات الأحدث، لا تحتاج إلى تمرير كائن sqlContext بشكل صريح إلى كل استدعاء دالة.
  • بالنسبة إلى Spark 2.2 والإصدارات الأحدث، لم تعد دفاتر الملاحظات تستورد SparkR بشكل افتراضي لأن وظائف SparkR كانت تتعارض مع الدالات المسماة بالمثل من الحزم الشائعة الأخرى. لاستخدام SparkR، يمكنك الاتصال library(SparkR) بدفاتر الملاحظات. تم تكوين جلسة SparkR بالفعل، وستتحدث جميع وظائف SparkR إلى نظام المجموعة المرفق باستخدام جلسة العمل الحالية.

SparkR في مهام إرسال spark

يمكنك تشغيل البرامج النصية التي تستخدم SparkR على Azure Databricks كمهام إرسال spark، مع تعديلات طفيفة على التعليمات البرمجية.

إنشاء SparkR DataFrames

يمكنك إنشاء DataFrame من R data.frameمحلي أو من مصدر بيانات أو باستخدام استعلام Spark SQL.

من R محلي data.frame

أبسط طريقة لإنشاء DataFrame هي تحويل R data.frame محلي إلى SparkDataFrame. على وجه التحديد يمكننا استخدام createDataFrame وتمرير في R data.frame المحلي لإنشاء SparkDataFrame. مثل معظم وظائف SparkR الأخرى، createDataFrame تغير بناء الجملة في Spark 2.0. يمكنك مشاهدة أمثلة على ذلك في القصاصة البرمجية أدناه. لمزيد من الأمثلة، راجع createDataFrame.

library(SparkR)
df <- createDataFrame(faithful)

# Displays the content of the DataFrame to stdout
head(df)

استخدام واجهة برمجة تطبيقات مصدر البيانات

الطريقة العامة لإنشاء DataFrame من مصدر بيانات هي read.df. يأخذ هذا الأسلوب مسار الملف لتحميل ونوع مصدر البيانات. يدعم SparkR قراءة ملفات CSV وJSON والنص وParquet في الأصل.

library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)

يستنتج SparkR تلقائيا المخطط من ملف CSV.

إضافة موصل مصدر بيانات باستخدام حزم Spark

من خلال حزم Spark يمكنك العثور على موصلات مصدر البيانات لتنسيقات الملفات الشائعة مثل Avro. على سبيل المثال، استخدم حزمة spark-avro لتحميل ملف Avro. يعتمد توفر حزمة spark-avro على إصدار نظام المجموعة الخاص بك. راجع ملف Avro.

أولا، قم بالتحويل data.frameإلى Spark DataFrame، واحفظه كملف Avro.

require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")

للتحقق من حفظ ملف Avro:

%fs ls /tmp/iris.avro

الآن استخدم حزمة spark-avro مرة أخرى لقراءة البيانات.

irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)

يمكن أيضا استخدام واجهة برمجة تطبيقات مصدر البيانات لحفظ DataFrames في تنسيقات ملفات متعددة. على سبيل المثال، يمكنك حفظ DataFrame من المثال السابق إلى ملف Parquet باستخدام write.df.

write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet

من استعلام Spark SQL

يمكنك أيضا إنشاء SparkR DataFrames باستخدام استعلامات Spark SQL.

# Register earlier df as temp view
createOrReplaceTempView(irisDF2, "irisTemp")
# Create a df consisting of only the 'species' column using a Spark SQL query
species <- sql("SELECT species FROM irisTemp")

species هو SparkDataFrame.

عمليات DataFrame

تدعم Spark DataFrames عددا من الوظائف للقيام بمعالجة البيانات المنظمة. فيما يلي بعض الأمثلة الأساسية. يمكن العثور على قائمة كاملة في مستندات API.

تحديد الصفوف والأعمدة

# Import SparkR package if this is a new notebook
require(SparkR)

# Create DataFrame
df <- createDataFrame(faithful)
# Select only the "eruptions" column
head(select(df, df$eruptions))
# You can also pass in column name as strings
head(select(df, "eruptions"))
# Filter the DataFrame to only retain rows with wait times shorter than 50 mins
head(filter(df, df$waiting < 50))

التجميع والتجميع

تدعم SparkDataFrames عددا من الوظائف شائعة الاستخدام لتجميع البيانات بعد التجميع. على سبيل المثال، يمكنك حساب عدد المرات التي يظهر فيها كل وقت انتظار في مجموعة البيانات المؤمنة.

head(count(groupBy(df, df$waiting)))
# You can also sort the output from the aggregation to get the most common waiting times
waiting_counts <- count(groupBy(df, df$waiting))
head(arrange(waiting_counts, desc(waiting_counts$count)))

عمليات العمود

يوفر SparkR عددا من الوظائف التي يمكن تطبيقها مباشرة على الأعمدة لمعالجة البيانات وتجميعها. يوضح المثال التالي استخدام الدالات الحسابية الأساسية.

# Convert waiting time from hours to seconds.
# You can assign this to a new column in the same DataFrame
df$waiting_secs <- df$waiting * 60
head(df)

التعلم الآلي

يعرض SparkR معظم خوارزميات MLLib. تحت الغطاء، يستخدم SparkR MLlib لتدريب النموذج.

يوضح المثال التالي كيفية بناء نموذج GLM الشاش باستخدام SparkR. لتشغيل الانحدار الخطي، قم بتعيين العائلة إلى "gaussian". لتشغيل الانحدار اللوجستي، قم بتعيين العائلة إلى "binomial". عند استخدام SparkML GLM SparkR ينفذ تلقائيا ترميزا واحدا ساخنا للميزات الفئوية بحيث لا تحتاج إلى القيام به يدويا. بالإضافة إلى ميزات السلسلة والنوع المزدوج، من الممكن أيضا ملاءمة ميزات MLlib Vector، للتوافق مع مكونات MLlib الأخرى.

# Create the DataFrame
df <- createDataFrame(iris)

# Fit a linear model over the dataset.
model <- glm(Sepal_Length ~ Sepal_Width + Species, data = df, family = "gaussian")

# Model coefficients are returned in a similar format to R's native glm().
summary(model)

للحصول على البرامج التعليمية، راجع البرنامج التعليمي: تحليل البيانات باستخدام glm.

للحصول على أمثلة إضافية، راجع العمل مع DataFrames والجداول في R.