2016-08-03 12 views
5

मैं स्पार्क एसक्यूएल का उपयोग कर एक हाइव तालिका पढ़ रहा हूँ और एक स्केला को यह बताए वैलएक छत्ता मेज से पढ़ें और चिंगारी एसक्यूएल

val x = sqlContext.sql("select * from some_table") 

तो मैं साथ dataframe एक्स कुछ प्रसंस्करण कर रहा हूँ का उपयोग कर इसे वापस करने के लिए लिख सकते हैं और आखिरकार डेटाफ्रेम वाई के साथ आ रहा है, जिसमें टेबल कुछ_टेबल के रूप में सटीक स्कीमा है।

अंत में मैं एक ही छत्ता तालिका some_table

y.write.mode(SaveMode.Overwrite).saveAsTable().insertInto("some_table") 

तो मैं त्रुटि हो रही है

org.apache.spark.sql.AnalysisException करने के लिए y dataframe के ऊपर लिख डालने के लिए कोशिश कर रहा हूँ: नहीं कर सकते तालिका में ओवरराइट डालें जिसे

मैंने एक सम्मिलित एसक्यूएल कथन बनाने और sqlContext.sql का उपयोग करके इसे फायर करने का प्रयास किया है () लेकिन यह भी मुझे एक ही त्रुटि दे दी।

क्या कोई तरीका है कि मैं इस त्रुटि को बाईपास कर सकता हूं? मुझे रिकॉर्ड्स को उसी तालिका में वापस डालना होगा।


हाय मैं के रूप में सुझाव कर रही है, लेकिन अभी भी एक ही त्रुटि मिल रही है की कोशिश की।

val x = sqlContext.sql("select * from incremental.test2") 
val y = x.limit(5) 
y.registerTempTable("temp_table") 
val dy = sqlContext.table("temp_table") 
dy.write.mode("overwrite").insertInto("incremental.test2") 

scala> dy.write.mode("overwrite").insertInto("incremental.test2") 
      org.apache.spark.sql.AnalysisException: Cannot insert overwrite into table that is also being read from.; 

उत्तर

5

आपको सबसे पहले एक अस्थायी तालिका

y.write.mode("overwrite").saveAsTable("temp_table") 

में अपने DataFrame y सहेजना चाहिए तो फिर आप अपने लक्ष्य तालिका

val dy = sqlContext.table("temp_table") 
dy.write.mode("overwrite").insertInto("some_table") 
+0

में पंक्तियों के ऊपर लिख सकते हैं एक ही गलती फिर से मिल गया। कोड स्निपेट – Avi

+0

के साथ मेरा प्रश्न संपादित करें क्षमा करें, मैंने अपना जवाब संपादित कर लिया है। registerAsTempTable एक इन-मेमोरी टेबल बनाएगा, इस प्रकार एक ही त्रुटि दे रहा है। SaveAsTable के साथ इसे काम करना चाहिए (लेकिन फिर डिस्क पर लिखा जाता है, आपको बाद में टेबल छोड़ना होगा)। क्षमा करें, मुझे अन्य विकल्प – cheseaux

+0

हां नहीं दिखाई देता है, मैंने स्थिति को उसी तर्क के साथ संभाला है, लेकिन मुझे लगता है कि इसकी लागत प्रभावी नहीं है। जिस बिंदु पर आपने हाइलाइट किया था, डिस्क पर लिखना, वह हिस्सा है जिसे मैं छोड़ना पसंद करूंगा। आपकी मदद @cheseaux के लिए वैसे भी धन्यवाद। अगर आपको इस पर कुछ अच्छा लगता है तो मुझे बताएं। चीयर्स !! – Avi

संबंधित मुद्दे