मैं स्पार्क डेटा फ्रेम df पर सिंटैक्स की तरह एसक्यूएल निष्पादित करना चाहता हूं। मान लें कि मुझे गणना की आवश्यकता है

cal_col = 113.4*col1 +41.4*col2....

इस समय मैं जो करता हूं वह या तो है:

1/अस्थायी दृश्य के रूप में प्रसारण:

df.createOrReplaceTempView("df_view")
df = spark.sql("select *, 113.4*col1 +41.4*col2... AS cal_col from df_view")

प्रश्न : क्या किसी बड़े df को दृश्य के रूप में प्रसारित करने से बहुत अधिक खर्च होता है? यदि हाँ, तो किस बिंदु पर इसका कोई अर्थ नहीं रह गया है? मान लें कि df में 250 कॉलम हैं, 15 मिलियन रिकॉर्ड हैं।

2/पायस्पार्क डेटाफ्रेम सिंटैक्स, जिसे पढ़ना थोड़ा कठिन है और सूत्र से संशोधन की आवश्यकता है:

df = df.withColumn("cal_col", 113.4*F.col("col1") + 41.4*F.col("col2")+...)

सूत्र लंबा हो सकता है और पढ़ने में मुश्किल हो सकता है।

प्रश्न: क्या F.col के बिना SQL जैसे सिंटैक्स के रूप में लिखने का कोई तरीका है?

लाइन के साथ कुछ

 df = df.select("*, (113.4*col1 +41.4*col2...) as cal_col")
0
Kenny 31 मार्च 2020, 19:58

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने dataframe पर सिंटैक्स की तरह SQL में स्पार्क लिखने के लिए df.selectExpr("") का उपयोग कर सकते हैं।

df.selectExpr("*, (113.4*col1 +41.4*col2...) as cal_col")

साथ ही, एक दृश्य बनाने के बजाय चाहते हैं, इसे करने का एक बेहतर तरीका है, अपने तर्क से पहले df.persist() को डेटाफ़्रेम को मेमोरी में भेजना (और डिस्क पर स्पिल- डिफ़ॉल्ट रूप से) ) और फिर उस पर अपना selectExpr चलाएं।

लिंक: https:// Spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.selectExpr

1
murtihash 31 मार्च 2020, 17:07