2016-04-27 13 views
9

स्कैला एपीआई में एकाधिक कॉलम पर फ़िल्टर करने के लिए कोरेंट सिंटैक्स क्या है? मैं इस तरह कुछ करना चाहते हैं:स्पार्क एसक्यूएल फ़िल्टर एकाधिक फ़ील्ड्स

dataFrame.filter($"col01" === "something" && $"col02" === "something else") 

या

dataFrame.filter($"col01" === "something" || $"col02" === "something else") 

संपादित करें:

यह मेरा मूल कोड कैसा दिखता है। सब कुछ एक स्ट्रिंग के रूप में आता है।

df.select($"userID" as "user", $"itemID" as "item", $"quantity" cast("int"), $"price" cast("float"), $"discount" cast ("float"), sqlf.substring($"datetime", 0, 10) as "date", $"group") 
    .filter($"item" !== "" && $"group" !== "-1") 
+0

ठीक दिखता है। क्या आपको कोई समस्या है? – zero323

+1

यदि यह काम नहीं करता है, तो हो सकता है कि आप 'sqlContext.implicits._' आयात करें', जहां 'sqlContext'' SQLContext' या 'HiveContext' का उदाहरण है। –

+0

मुझे "मूल्य && स्ट्रिंग का सदस्य नहीं मिला"। समाधान प्रत्येक कथन को एक कोष्ठक में लपेटना है। – gstvolvr

उत्तर

14

मुझे लगता है कि मैं देखता हूं कि समस्या क्या है। किसी कारण से, स्पार्क दो की अनुमति नहीं देता है! = 0 के समान फ़िल्टरफ़िल्टर स्पार्क स्रोत कोड में परिभाषित करने की आवश्यकता है।

अब आप अपने कोड काम करने के लिए, तो आप इस का उपयोग कर सकते एक ही बयान

df.filter($"item" !== "").filter($"group" !== "-1").select(....) 

यह लिंक here में फिल्टर

df.filter(col("item").notEqual("") && col("group").notEqual("-1")) 

या दो फिल्टर का उपयोग करने के लिए अलग अलग चिंगारी तरीकों के साथ कर सकते हैं।

+0

हाय @ देही? क्या आप जानते हैं कि दोनों विकल्प समान प्रदर्शन करते हैं? – servatj

+1

@servatj मैंने अपने अंत में प्रदर्शन में कोई अंतर नहीं देखा है। – dheee

+0

! == कक्षा कॉलम में बहिष्कृत है और! == में वही प्राथमिकता नहीं है जैसे ===। तो मैं = = = इसके बजाय उपयोग करने के लिए recon recon। –

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