5

मैं स्पार्क एसक्यूएल, स्कैला में स्पार्क डेटाफ्रेम के लिए विंडो स्लाइड फ़ंक्शन देख रहा हूं।स्पार्क एसक्यूएल विंडो फ़ंक्शन अंतराल

मेरे पास कॉलम Col1, Col1, Col1, दिनांक के साथ डेटाफ्रेम है।

Col1 Col2 Col3 date  volume new_col 
         201601 100.5 
         201602 120.6 100.5 
         201603 450.2 120.6 
         201604 200.7 450.2 
         201605 121.4 200.7` 

अब मैं नाम (new_col) के साथ एक पंक्ति, नीचे slided के रूप में ऊपर दिखाए गए एक नया स्तंभ जोड़ना चाहते हैं।

मैंने विंडो फ़ंक्शन का उपयोग करने के लिए विकल्प के नीचे प्रयास किया।

val windSldBrdrxNrx_df = df.withColumn("Prev_brand_rx", lag("Prev_brand_rx",1)) 

क्या कोई मेरी मदद कर सकता है कि यह कैसे करें।

+0

@ स्पाम 2.0 तक रमेश, उपयोगकर्ताओं को विंडो कार्यों को लागू करने के लिए 'SQLContext' के बजाय 'HiveContext' का उपयोग करना पड़ा। 'HiveContext' को 'स्पार्ककॉन्टेक्स्ट'' के उदाहरण को पास करके 'SQLContext' के समान ही बनाया गया है। अगर मुझे सही याद है, तो आपको अपने स्पार्क वितरण के लिए उपयुक्त संस्करण के साथ 'org.apache.spark: स्पार्क-हाइव_2.10' शामिल करने की भी आवश्यकता है। –

+0

@msrinivas, धन्यवाद आपका उत्तर सही है। – Ramesh

उत्तर

9

आप सही ढंग से सब तुम्हें याद कर रहे हैं over(window expression)lag

val df = sc.parallelize(Seq((201601, 100.5), 
    (201602, 120.6), 
    (201603, 450.2), 
    (201604, 200.7), 
    (201605, 121.4))).toDF("date", "volume") 

val w = org.apache.spark.sql.expressions.Window.orderBy("date") 

import org.apache.spark.sql.functions.lag 

val leadDf = df.withColumn("new_col", lag("volume", 1, 0).over(w)) 

leadDf.show() 

+------+------+-------+ 
| date|volume|new_col| 
+------+------+-------+ 
|201601| 100.5| 0.0| 
|201602| 120.6| 100.5| 
|201603| 450.2| 120.6| 
|201604| 200.7| 450.2| 
|201605| 121.4| 200.7| 
+------+------+-------+ 

पर यह कोड स्पार्क खोल पर चलाया गया था है 2.0.2

+0

मेरे पास 1.5.2 सेटअप नहीं है और मेरी मशीन में 1.5.2 (स्पार्क-हाइव जार) लोड करने के लिए मेवेन के साथ समस्या का सामना करना पड़ रहा है। – mrsrinivas

+0

मैं अब हाइव संदर्भ बनाने में सक्षम हूं। लेकिन फिर भी मुझे एक ही त्रुटि मिलती है। – Ramesh

+0

मुझे लगता है कि sqlcontext का उपयोग कर डेटाफ्रेम बनाया गया है, फिर भी मैं विंडो फ़ंक्शन का उपयोग नहीं कर सकता। – Ramesh

1

आप दो संकुल नीचे आयात कर सकते हैं, जो अंतराल के मुद्दे को हल करेंगे निर्भरता।

import org.apache.spark.sql.functions.{lead, lag} 
import org.apache.spark.sql.expressions.Window 
संबंधित मुद्दे