نظرة عامة على SparkR
SparkR هي حزمة R توفر واجهة أمامية خفيفة الوزن لاستخدام Apache Spark من R. يدعم SparkR أيضا التعلم الآلي الموزع باستخدام MLlib.
مرجع دالة SparkR
يمكنك العثور على أحدث مرجع دالة SparkR على spark.apache.org.
يمكنك أيضا عرض تعليمات الدالة في دفاتر ملاحظات R أو RStudio بعد استيراد حزمة SparkR.
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.