Pyspark.sql.DataFrame.selectExpr()
הפונקציה selectexpr() לוקחת את העמודות/קבוצת הביטויים ומחזירה את ה-DataFrame בהתבסס על הביטויים/עמודות שצוינו. ניתן לציין מספר ביטויים בפונקציה זו המופרדת באמצעות פסיק. כדי להציג את ה-DataFrame, נוכל להשתמש בפונקציות show()/collect().
תחביר:
pyspark_DataFrame_object.selectExpr('עמודות'/'ביטויים')
כאן, pyspark_DataFrame_object הוא ה-PySpark DataFrame הקלט.
תרחיש 1: בחר את העמודות
בתרחיש זה, נראה כיצד לבחור את העמודות המסוימות מה-PySpark DataFrame באמצעות הפונקציה selectExpr().
הביטוי שבו נעשה שימוש הוא 'עמודה_קיימת כשם_חדש'. כאן, ה- existent_column הוא שם העמודה שקיים ב-DataFrame והוא מוצג בשם new_name (Aliasing).
דוגמא:
צור PySpark DataFrame בשם 'agri_df' עם 5 שורות ועמודות. קבל את העמודות 'מצב_קרקע' ו-'סוג_קרקע' בתור 'STATUS' ו-'TYPE'.
ייבוא pysparkמ-pyspark.sql ייבוא SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'רמז לינוקס' ).getOrCreate()
# נתוני חקלאות עם 5 שורות ו-5 עמודות
אגרי =[{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 2500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'כן' , 'אקרים' : 3500 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'הוֹדוּ' },
{ 'סוג_קרקע' : אף אחד , 'זמינות_השקיה' : 'כן' , 'אקרים' : 210 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'בְּרִיטַנִיָה' },
{ 'סוג_קרקע' : 'אַחֵר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 1000 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'חוֹל' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'הוֹדוּ' }]
# צור את מסגרת הנתונים מהנתונים שלמעלה
agri_df = linuxhint_spark_app.createDataFrame(agri)
# קבל את ה-Soil_status ו-Soil_Type בתור 'STATUS' ו-'TYPE'.
agri_df.selectExpr( 'מצב_קרקע כ-STATUS' , 'Type_Soil as TYPE' ).הופעה()
תְפוּקָה:
תרחיש 2: ציון הביטויים המותנים
בתרחיש זה, נראה כיצד להעריך את התנאים בתוך הפונקציה selectExpr() .
הביטוי שבו נעשה שימוש הוא 'ערך אופרטור_קיים_עמודה'. כאן, ה- existent_column הוא שם העמודה שקיים ב-DataFrame ואנו משווים כל ערך בעמודה זו עם המחרוזת/ערך.
דוגמה 1:
בדוק אם המדינה היא 'ארה'ב' או לא. כאן נעשה שימוש באופרטור השווה (=).
ייבוא pysparkמ-pyspark.sql ייבוא SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'רמז לינוקס' ).getOrCreate()
# נתוני חקלאות עם 5 שורות ו-5 עמודות
אגרי =[{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 2500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'כן' , 'אקרים' : 3500 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'הוֹדוּ' },
{ 'סוג_קרקע' : אף אחד , 'זמינות_השקיה' : 'כן' , 'אקרים' : 210 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'בְּרִיטַנִיָה' },
{ 'סוג_קרקע' : 'אַחֵר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 1000 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'חוֹל' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'הוֹדוּ' }]
# צור את מסגרת הנתונים מהנתונים שלמעלה
agri_df = linuxhint_spark_app.createDataFrame(agri)
# בדוק אם המדינה היא 'ארה'ב' או לא.
agri_df.selectExpr( 'מדינה = 'ארה'ב'' ).הופעה()
תְפוּקָה:
דוגמה 2:
בדוק אם Soil_Type הוא NULL או לא. מילת המפתח NULL בודקת אם הערך הוא NULL או לא. אם הוא null, true מוחזר. אחרת, false מוחזר. הביטוי הסופי הוא 'Soil_Type IS NULL'
ייבוא pysparkמ-pyspark.sql ייבוא SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'רמז לינוקס' ).getOrCreate()
# נתוני חקלאות עם 5 שורות ו-5 עמודות
אגרי =[{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 2500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'כן' , 'אקרים' : 3500 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'הוֹדוּ' },
{ 'סוג_קרקע' : אף אחד , 'זמינות_השקיה' : 'כן' , 'אקרים' : 210 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'בְּרִיטַנִיָה' },
{ 'סוג_קרקע' : 'אַחֵר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 1000 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'חוֹל' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'הוֹדוּ' }]
# צור את מסגרת הנתונים מהנתונים שלמעלה
agri_df = linuxhint_spark_app.createDataFrame(agri)
# בדוק אם Soil_Type הוא NULL או לא.
agri_df.selectExpr( 'סוג_אדמה הוא NULL' ).הופעה()
תְפוּקָה:
תרחיש 3: הערכת הביטויים
בתרחיש זה, נראה כיצד לציין את הביטויים המתמטיים. הביטוי שבו נעשה שימוש הוא 'ביטוי מתמטי_קיים_עמודה'.
דוגמא:
- הצג את העמודה 'אקרים' בפועל.
- הוסף 100 לעמודה 'אקרים'.
- הורידו 100 מהעמודה 'אקרים'.
- הכפל 100 עם העמודה 'אקרים'.
- חלקו את העמודה 'אקרים' ב-100.
מ-pyspark.sql ייבוא SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'רמז לינוקס' ).getOrCreate()
# נתוני חקלאות עם 5 שורות ו-5 עמודות
אגרי =[{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 2500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'כן' , 'אקרים' : 3500 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'הוֹדוּ' },
{ 'סוג_קרקע' : אף אחד , 'זמינות_השקיה' : 'כן' , 'אקרים' : 210 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'בְּרִיטַנִיָה' },
{ 'סוג_קרקע' : 'אַחֵר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 1000 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'חוֹל' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'הוֹדוּ' }]
# צור את מסגרת הנתונים מהנתונים שלמעלה
agri_df = linuxhint_spark_app.createDataFrame(agri)
# כתוב 4 ביטויים כדי להחסיר, להוסיף, לחלק ולהכפיל את העמודה אקרים.
agri_df.selectExpr( 'אקרים' , 'אקרים - 100' , 'אקרים * 100' , 'אקרים + 100' , 'אקרים / 100' ).הופעה()
תְפוּקָה:
תרחיש 4: החלת הפונקציות המצטברות
SUM(column_name) - הוא מעריך את הערך הכולל בעמודה שצוינה.
MEAN(column_name) - הוא מעריך את הערך הממוצע בעמודה שצוינה.
MIN(column_name) – הוא מחזיר את האלמנט המינימלי מבין כל האלמנטים בעמודה שצוינה.
MAX(שם_עמודה) – הוא מחזיר את הרכיב המקסימלי מבין כל האלמנטים בעמודה שצוינה.
דוגמא:
- מצא את הרכיבים הכוללים, הממוצע, הספירה, המינימום והמקסימום של 'אקרים'.
- מצא את האלמנטים המינימליים והמקסימליים בעמודה 'מצב_קרקע'.
מ-pyspark.sql ייבוא SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'רמז לינוקס' ).getOrCreate()
# נתוני חקלאות עם 5 שורות ו-5 עמודות
אגרי =[{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 2500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'שָׁחוֹר' , 'זמינות_השקיה' : 'כן' , 'אקרים' : 3500 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'הוֹדוּ' },
{ 'סוג_קרקע' : אף אחד , 'זמינות_השקיה' : 'כן' , 'אקרים' : 210 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'בְּרִיטַנִיָה' },
{ 'סוג_קרקע' : 'אַחֵר' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 1000 , 'מצב_קרקע' : 'רָטוֹב' ,
'מדינה' : 'ארה'ב' },
{ 'סוג_קרקע' : 'חוֹל' , 'זמינות_השקיה' : 'לא' , 'אקרים' : 500 , 'מצב_קרקע' : 'יָבֵשׁ' ,
'מדינה' : 'הוֹדוּ' }]
# צור את מסגרת הנתונים מהנתונים שלמעלה
agri_df = linuxhint_spark_app.createDataFrame(agri)
# פעולות מצטברות
agri_df.selectExpr( 'SUM(אקרים)' , 'ממוצע (דונם)' , 'COUNT(אקרים)' , 'AVG(אקרים)' , 'MIN(אקרים)' ,
'מקס(אקרים)' ).הופעה()
agri_df.selectExpr( 'MIN(סטטוס_קרקע)' , 'MAX(סטטוס_קרקע)' ).הופעה()
תְפוּקָה:
סיכום
דיברנו על הפונקציה selectExpr() שלוקחת את העמודות/קבוצות של ביטויים ומחזירה את ה-DataFrame בהתבסס על הביטויים/עמודות שצוינו. כחלק מכך, למדנו את ארבעת התרחישים העיקריים שבהם ה- selectExpr() ישים. ניתן לציין בפונקציה זו מספר ביטויים המופרדים באמצעות פסיק. אין צורך ליצור TEMPORARY VIEW כדי להשתמש בפונקציה selectExpr() .