2015-08-24 16 views
8

में शामिल होने के बजाय स्पार्क एसक्यूएल प्रदर्शन कर रहे हैं। कुछ पहले गणना के बाद मैं एक दूसरे के साथ दो डेटाफ्रेम में शामिल होने की कोशिश कर रहा हूं। आदेश सरल है:स्पार्क एसक्यूएल

employee.join(employer, employee("id") === employer("id")) 

हालांकि, जॉइन कार्टेशियन में शामिल होने लगता है, पूरी तरह से मेरे === कथन को अनदेखा कर रहा है। क्या किसी को पता है कि यह क्यों हो रहा है?

+0

SO NNamed में आपका स्वागत है। यदि आप मदद मांग रहे हैं तो आपको हमें मौका देना चाहिए :) शुरू करने के लिए अच्छी जगह [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] प्रदान करना है (http://stackoverflow.com/help/mcve)। – zero323

उत्तर

21

मुझे लगता है कि मैंने एक ही मुद्दे से लड़ा था। जांचें कि क्या आपके पास चेतावनी है:

Constructing trivially true equals predicate [..] 

जॉइन ऑपरेशन बनाने के बाद। यदि ऐसा है, तो कर्मचारी या नियोक्ता डेटाफ्रेम में कॉलम में से कोई एक उपनाम, उदा। इस तरह:

employee.select(<columns you want>, employee("id").as("id_e")) 

फिर employee("id_e") === employer("id") पर शामिल हों।

स्पष्टीकरण। इस आपरेशन के प्रवाह पर देखो:

enter image description here

आप सीधे DataFrame बी की गणना और स्तंभ क्रमांक, जो DataFrame एक से आता है पर उन्हें एक साथ शामिल होने के लिए अपने DataFrame एक का उपयोग करते हैं, तो आप प्रदर्शन नहीं किया जाएगा आप शामिल होना चाहते हैं। डेटाफ्रेम बी से आईडी कॉलम वास्तव में डेटाफ्रेमए से बिल्कुल वही कॉलम है, इसलिए स्पार्क केवल यह कहता है कि कॉलम स्वयं के बराबर है और इसलिए मामूली सच भविष्यवाणी है। इससे बचने के लिए, आपको कॉलम में से एक को उपनाम करना होगा ताकि वे स्पार्क के लिए "अलग" कॉलम के रूप में दिखाई दें। अभी के लिए केवल चेतावनी संदेश इस तरह से लागू किया गया है:

def === (other: Any): Column = { 
    val right = lit(other).expr 
    if (this.expr == right) { 
     logWarning(
     s"Constructing trivially true equals predicate, '${this.expr} = $right'. " + 
      "Perhaps you need to use aliases.") 
    } 
    EqualTo(expr, right) 
    } 

यह मेरे लिए एक बहुत अच्छा समाधान समाधान (यह चेतावनी संदेश को याद वास्तव में आसान है), मुझे आशा है कि यह किसी भी तरह ठीक किया जाएगा नहीं है।

चेतावनी संदेश देखने के लिए आप भाग्यशाली हैं, it has been added not so long ago;)।

+0

वह वास्तव में यह था! धन्यवाद! – NNamed

+0

मैं 1.5.2 में शामिल मुद्दों को ठीक करने की कोशिश कर रहे सप्ताहांत में से अधिकांश के लिए संघर्ष कर रहा था - यह दो मुद्दों में से एक था और आपके उत्तर ने बहुत निराशा बचाई। धन्यवाद! – Pyrce

+0

तब तक उसी निराशा से गुजरना पड़ा जब तक कि मैंने स्पार्क कोड में खोदना शुरू नहीं किया;)। – Niemand

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