2014-10-07 13 views
9

का उपयोग कर SQL सर्वर से डेटा पढ़ना क्या स्पार्क एप्लिकेशन में माइक्रोसॉफ्ट एसक्यूएल सर्वर (और ओरेकल, माइस्क्ल, इत्यादि) से डेटा को पढ़ना संभव है? या क्या हमें मेमोरी सेट बनाने और आरडीडी में इसे लंबित करने की आवश्यकता है?स्पार्क एसक्यूएल

+1

इस यकीन के लिए अनुत्तरित होने वाला है: पी – khandelwaldeval

+0

तो लगता है ... किसी भी कारण से क्यों? अगर यह सबकुछ से डेटा को बंद कर सकता है, तो सबसे आम स्टोर क्यों नहीं? – ashic

+0

आपको उत्तर देने के लिए कुछ दिनों तक इंतजार करना होगा क्योंकि टैग 'अपाचे-स्पार्क' बहुत गंभीर रूप से उपयोग किया जाता है। अपाचे लोगों के लिए आपके प्रश्न का उत्तर देने के लिए कुछ दिनों तक प्रतीक्षा करें। – khandelwaldeval

उत्तर

5

मेलिंग सूची से इसका समाधान मिला। इसे पूरा करने के लिए जेडीबीसीआरडीडी का उपयोग किया जा सकता है। मुझे एमएस एसक्यूएल सर्वर जेडीबीसी चालक जार प्राप्त करने और इसे मेरे प्रोजेक्ट के लिए lib में जोड़ने की आवश्यकता थी। मैं एकीकृत सुरक्षा का उपयोग करना चाहता था, और jq.library.path देख सकते हैं कि एक स्थान में sqljdbc_auth.dll (एक ही डाउनलोड में उपलब्ध) रखने के लिए आवश्यक है। फिर, कोड इस तरह दिखता है:

 val rdd = new JdbcRDD[Email](sc, 
     () => {DriverManager.getConnection(
"jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;")}, 
      "SELECT * FROM TABLE_NAME Where ? < X and X < ?", 
      1, 100000, 1000, 
      (r:ResultSet) => { SomeClass(r.getString("Col1"), 
      r.getString("Col2"), r.getString("Col3")) }) 

यह SomeClass.The, दूसरे तीसरे और चौथे मापदंडों के एक RDD देता है के लिए आवश्यक हैं और निचले और ऊपरी सीमा के लिए कर रहे हैं, और विभाजन की संख्या। दूसरे शब्दों में, इस स्रोत डेटा को काम करने के लिए लंबे समय तक विभाजित करने की आवश्यकता है।

5

स्पार्क 1.4.0+ आप अब sqlContext.read.jdbc

है कि आप एक पंक्ति के RDD वस्तुओं के बजाय एक DataFrame दे देंगे का उपयोग कर सकते हैं।

समाधान आप ऊपर पोस्ट के बराबर होगा

sqlContext.read.jdbc("jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;", "TABLE_NAME", "id", 1, 100000, 1000, new java.util.Properties)

यह तालिका के स्कीमा लेने चाहिए, लेकिन अगर आप इसे मजबूर करने के लिए चाहते हैं तो आप के बाद स्कीमा विधि का उपयोग कर सकते हैं sqlContext.read.schema(...insert schema here...).jdbc(...rest of the things...)

ध्यान दें कि आपको यहां कुछ क्लास का आरडीडी नहीं मिलेगा (जो मेरे दृश्य में अच्छा है)। इसके बजाय आपको प्रासंगिक फ़ील्ड का डेटाफ्रेम मिलेगा।

अधिक जानकारी यहां पाया जा सकता है: http://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases

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