मैं स्पार्क पर एक नौसिखिया हूँ दिया (मेरे संस्करण 1.6.0 है) और अब मैं नीचे दिए गए समस्या को हल करने की कोशिश कर रहा हूँ:कैसे प्रदर्शन करने के लिए "लुक" चिंगारी dataframes पर आपरेशन अनेक शर्तें
वहाँ मान लीजिए दो स्रोत फाइलें हैं:
- पहला (ए शॉर्ट के लिए) एक बड़ा है जिसमें ए 1, बी 1, सी 1 और अन्य 80 कॉलम नामक कॉलम हैं। अंदर 230 के रिकॉर्ड हैं।
- दूसरा (बी शॉर्ट के लिए) एक छोटी लुकअप टेबल है जिसमें ए 2, बी 2, सी 2 और डी 2 नामक कॉलम शामिल हैं। अंदर 250 रिकॉर्ड हैं।
- सबसे पहले देखने A1, बी 1 और बी में सी 1 (इसी कॉलम ए 2, बी 2 और सी 2 कर रहे हैं), सफल अगर:
अब हम नीचे तर्क दिया, एक में एक नया स्तंभ डालने की आवश्यकता , नए जोड़े गए कॉलम के मान के रूप में डी 2 वापस करें। यदि कुछ भी नहीं मिला ...
- फिर बी में लुकअप ए 1, बी 1 यदि सफल हो, तो डी 2 लौटाएं। तो कुछ भी नहीं मिला ...
- डिफ़ॉल्ट मान "NA"
मैं पहले से ही फाइलों में पढ़ सकते हैं और उन्हें डेटा फ्रेम में परिवर्तित कर दिया है निर्धारित करें। पहली स्थिति के लिए, मुझे परिणाम मिलाकर उन्हें एक साथ जोड़ दिया गया। लेकिन मुझे अगले चरण में अच्छा रास्ता नहीं मिल रहा है।
मेरी वर्तमान कोशिश कम सख्त स्थिति का उपयोग करके ए और बी में शामिल होने से एक नया डेटा फ्रेम बनाना है। हालांकि मुझे कोई संकेत नहीं है कि वर्तमान डेटा फ्रेम को दूसरे से कैसे अपडेट किया जाए। या क्या पूरी समस्या से निपटने के लिए कोई और अधिक सहज और कुशल तरीका है?
सभी उत्तरों के लिए धन्यवाद।
----------------------------- 2016030 9 -------------- पर अपडेट करें ------------------
अंततः @mlk का जवाब स्वीकार कर लिया। यूडीएफ बनाम जुड़ने पर उनकी महान टिप्पणियों के लिए @ zero323 पर अभी भी बहुत बढ़िया धन्यवाद, टंगस्टन कोड पीढ़ी वास्तव में एक और समस्या है जिसका हम सामना कर रहे हैं। लेकिन चूंकि हम हर देखने के लिए देखने के स्कोर और औसत 4 की स्थिति क्या करने की जरूरत, पूर्व समाधान अधिक उपयुक्त है ...
अंतिम समाधान किसी भी तरह से नीचे की तरह लग रहा है स्निपेट:
```
import sqlContext.implicits._
import com.github.marklister.collections.io._
case class TableType(A: String, B: String, C: String, D: String)
val tableBroadcast = sparkContext.broadcast(CsvParser(TableType).parseFile("..."))
val lkupD = udf {
(aStr: String, bStr: String, cStr: String) =>
tableBroadcast.value.find {
case TableType(a, b, c, _) =>
(a == aStr && b == bStr && c == cStr) ||
(a == aStr && b == bStr)
}.getOrElse(TableType("", "", "", "NA")).D
}
df = df.withColumn("NEW_COL", lkupD($"A", $"B", $"C"))
```
शायद यह जाने का तरीका है। मैंने 'जॉइन' के साथ एक वैकल्पिक समाधान भी प्रदान किया। – zero323
धन्यवाद mlk। यदि लुकअप टेबल बड़ा है (500 के * 50), क्या यह अभी भी प्रसारण करना अच्छा है? –
और मेरा दूसरा सवाल यह है कि, मुझे अलग-अलग कॉलम पर 30 लुकअप करने की ज़रूरत है, और 50 यूडीएफ लिखना है, क्या प्रदर्शन प्रभावित होगा? –