2016-03-02 16 views
14

मैं Spark 1.3.0 और Spark Avro 1.0.0 का उपयोग कर रहा हूं। मैं the example on the repository page से काम कर रहा हूं। यह निम्न कोड में अच्छी तरह सेस्ट्रिंग पर फ़िल्टर स्पार्क डेटाफ्रेम

val df = sqlContext.read.avro("src/test/resources/episodes.avro") 
df.filter("doctor > 5").write.avro("/tmp/output") 

लेकिन क्या होगा अगर मैं देखने के लिए अगर doctor स्ट्रिंग सबस्ट्रिंग शामिल की जरूरत काम करता है? चूंकि हम एक स्ट्रिंग के अंदर हमारी अभिव्यक्ति लिख रहे हैं। "इसमें" करने के लिए मैं क्या करूँ?

उत्तर

26

आप contains उपयोग कर सकते हैं (यह एक मनमाना अनुक्रम के साथ काम करता है):

: ( _ एक मनमाना चरित्र से मेल खाते और % एक मनमाना अनुक्रम मिलान whith एसक्यूएल सरल नियमित अभिव्यक्ति के साथ की तरह एसक्यूएल)

df.filter($"foo".contains("bar")) 

like

df.filter($"foo".like("bar")) 

या rlike (Java regular expressions साथ की तरह):

आपकी आवश्यकताओं के आधार पर 0
df.filter($"foo".rlike("bar")) 

LIKE और RLIKE को SQL अभिव्यक्तियों के साथ भी काम करना चाहिए।

+0

उपरोक्त स्कैला कोड है? ऐसा लगता है कि स्कैला को $ साइन पसंद नहीं है। मैंने 'import org.apache.spark.sql.functions.lit' –

+6

स्कैला आयात किया। '$' काम करने के लिए आपको 'sqlContext.implicits._' आयात करना होगा। आप इसे 'df ("foo") 'या' org.apache.spark.sql.functions.col ("foo")' के साथ भी बदल सकते हैं। – zero323

+0

कमाल! बहुत बहुत धन्यवाद –

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