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

स्पार्क एसक्यूएल/हाइव क्वेरी में शामिल होने के साथ हमेशा के लिए लेता है

सबसे पहले आपके द्वारा की जाने वाली सभी प्रकार की क्वेरी अत्यंत अक्षम हैं। अभी के लिए (स्पार्क 1.5.0 *) इस तरह से जुड़ने के लिए, प्रत्येक बार क्वेरी निष्पादित होने पर दोनों तालिकाओं को फेरबदल/हैश-विभाजन करना पड़ता है। users . के मामले में यह कोई समस्या नहीं होनी चाहिए तालिका जहां user_id = 123 विधेय को संभवतः पुश-डाउन किया जाता है लेकिन फिर भी user_address . पर पूर्ण फेरबदल की आवश्यकता होती है .

इसके अलावा, यदि टेबल केवल पंजीकृत हैं और कैश्ड नहीं हैं, तो इस क्वेरी के प्रत्येक निष्पादन से एक संपूर्ण user_address प्राप्त होगा। MySQL से स्पार्क तक तालिका।

यह बिल्कुल स्पष्ट नहीं है कि आप एप्लिकेशन के लिए स्पार्क का उपयोग क्यों करना चाहते हैं, लेकिन सिंगल मशीन सेटअप, छोटे डेटा और प्रकार के प्रश्नों से पता चलता है कि स्पार्क यहां उपयुक्त नहीं है।

सामान्यतया यदि एप्लिकेशन लॉजिक के लिए एकल रिकॉर्ड एक्सेस की आवश्यकता होती है तो स्पार्क SQL अच्छा प्रदर्शन नहीं करेगा। यह विश्लेषणात्मक प्रश्नों के लिए डिज़ाइन किया गया है न कि OLTP डेटाबेस प्रतिस्थापन के रूप में।

यदि कोई एकल तालिका/डेटा फ़्रेम बहुत छोटा है तो आप प्रसारण का प्रयास कर सकते हैं।

import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.broadcast

val user: DataFrame = ???
val user_address: DataFrame = ???

val userFiltered = user.where(???)

user_addresses.join(
  broadcast(userFiltered), $"address_id" === $"user_address_id")

* इसे स्पार्क 1.6.0 में SPARK-11410 के साथ बदलना चाहिए जो लगातार तालिका विभाजन को सक्षम करना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PyMySQL का उपयोग करके, मैं RDS से कनेक्ट नहीं हो सकता

  2. ग्रुप बाय क्लॉज में एक चुनिंदा अभिव्यक्ति के परिणाम का पुन:उपयोग करें?

  3. एक टेबल बनाम कई टेबल

  4. एक सरणी का उपयोग कर MySQL क्वेरी

  5. सिम्फनी 2 / सिद्धांत में ENUM कैसे सक्षम करें?