निर्दिष्ट करता है मेरे पास एक बड़ा डेटाटाम (एकाधिक कॉलम और पंक्तियों के अरबों) और एक छोटा डेटाटाम (एकल कॉलम और 10,000 पंक्तियां) है।फ़िल्टर स्पार्क डेटाफ्रेम किसी अन्य डेटाफ्रेम पर आधारित है जो ब्लैकलिस्ट मानदंड
मैं जब भी largeDataFrame
में some_identifier
स्तंभ smallDataFrame
में पंक्तियों से मेल खाता largeDataFrame
से सभी पंक्तियों को फ़िल्टर करना चाहते हैं।
largeDataFrame
some_idenfitier,first_name
111,bob
123,phil
222,mary
456,sue
smallDataFrame
some_identifier
123
456
desiredOutput
111,bob
222,mary
यहाँ मेरी बदसूरत समाधान है:
यहाँ एक उदाहरण है।
val smallDataFrame2 = smallDataFrame.withColumn("is_bad", lit("bad_row"))
val desiredOutput = largeDataFrame.join(broadcast(smallDataFrame2), Seq("some_identifier"), "left").filter($"is_bad".isNull).drop("is_bad")
क्या कोई क्लीनर समाधान है?
और यह कारण है कि आप स्ट्रिंग्स, का उपयोग नहीं करते हैं जब आप वास्तव में enums चाहते हैं - डेटासेट के scaladoc। जुड़ने के लिए बाएंंति का एक विकल्प के रूप में उल्लेख नहीं है, इसलिए यह पता लगाना असंभव है कि क्या विकल्प हैं - एक गहरे गोता लगाने के बिना। मुझे लगता है कि यह एक जिरा वारंट की तरह लग रहा है - और पहले से ही एपीआई की पसंद से पहले से ही peeved था। –
ईमानदार होने के लिए, जब मैंने यह उत्तर लिखा, डेटासेट प्रयोगात्मक थे और मैं अभी भी एक बड़ा प्रशंसक नहीं हूं – eliasah
शुक्र है कि जेसेक में शामिल होने के लिए पूर्ण (या तो मैं आशा करता हूं) दस्तावेज: https: //jaceklaskowski.gitbooks। io/mastering-apache-spark/content/spark-sql-joins.html - उम्मीद है कि इसे यहां छोड़कर किसी और के जीवन को आसान बना दिया जाएगा। –