Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

स्पार्क SQL और MySQL- SaveMode। संशोधित डेटा सम्मिलित नहीं करना अधिलेखित करना

समस्या आपके कोड में है। क्योंकि आप उस तालिका को अधिलेखित कर देते हैं जिससे आप पढ़ने की कोशिश कर रहे हैं, इससे पहले कि स्पार्क वास्तव में इसे एक्सेस कर सके, आप सभी डेटा को प्रभावी ढंग से मिटा दें।

याद रखें कि स्पार्क आलसी है। जब आप एक Dataset बनाते हैं स्पार्क आवश्यक मेटाडेटा प्राप्त करता है, लेकिन डेटा लोड नहीं करता है। तो कोई जादू कैश नहीं है जो मूल सामग्री को सुरक्षित रखेगा। डेटा तब लोड किया जाएगा जब वास्तव में इसकी आवश्यकता होगी। यह तब होता है जब आप write . निष्पादित करते हैं क्रिया और जब आप लिखना शुरू करते हैं तो प्राप्त करने के लिए कोई और डेटा नहीं होता है।

आपको जो चाहिए वह कुछ इस प्रकार है:

  • एक Dataset
  • आवश्यक परिवर्तन लागू करें और एक मध्यवर्ती MySQL तालिका में डेटा लिखें।

  • TRUNCATE मूल इनपुट और INSERT INTO ... SELECT मध्यवर्ती तालिका या DROP . से मूल तालिका और RENAME मध्यवर्ती तालिका।

वैकल्पिक, लेकिन कम अनुकूल तरीका होगा:

  • एक Dataset
  • आवश्यक परिवर्तन लागू करें और एक सतत स्पार्क तालिका में डेटा लिखें (df.write.saveAsTable(...) या समकक्ष)
  • TRUNCATE मूल इनपुट।
  • डेटा वापस पढ़ें और सहेजें (spark.table(...).write.jdbc(...) )
  • स्पार्क टेबल छोड़ें।

हम इस बात पर जोर नहीं दे सकते कि स्पार्क cache का उपयोग कर रहे हैं / persist जाने का रास्ता नहीं है। रूढ़िवादी StorageLevel . के साथ भी (MEMORY_AND_DISK_2 / MEMORY_AND_DISK_SER_2 ) कैश्ड डेटा खो सकता है (नोड विफलताएं), जिससे मूक शुद्धता त्रुटियां हो सकती हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - डेटाबेस में मौजूद होने पर टेबल कैसे छोड़ें?

  2. RODBC में MySQL के लिए चारसेट कैसे सेट करें?

  3. MySQL 5.7 के लिए डिफ़ॉल्ट रूट पासवर्ड क्या है?

  4. MySQL क्वेरी / क्लॉज निष्पादन आदेश

  5. दो संभावित तालिकाओं में से एक के लिए एक MySQL विदेशी कुंजी करना संभव है?