2016-04-12 6 views
6

नहीं लेता है, मैं अपने स्पार्क डेटाफ्रेम से पंक्तियों को फ़िल्टर करने का प्रयास कर रहा हूं।स्पार्क का कॉलम.इसिन फ़ंक्शन सूची

val sequence = Seq(1,2,3,4,5) 
df.filter(df("column").isin(sequence)) 

दुर्भाग्य से, मैं documentation यह एक scala.collection.Seq सूची

मुझे लगता है मैं एक शाब्दिक नहीं करना चाहती लेता के अनुसार एक असमर्थित शाब्दिक प्रकार की त्रुटि

java.lang.RuntimeException: Unsupported literal type class scala.collection.immutable.$colon$colon List(1,2,3,4,5) 

मिल सकता है? तो मैं कुछ प्रकार के रैपर वर्ग में क्या ले सकता हूं?

उत्तर

6

@ जस्टिन पिहनी का जवाब सही है लेकिन यह अपूर्ण है। isin समारोह तर्क के लिए एक दोहराया पैरामीटर लेता है, तो आप इसे के रूप में तो उत्तीर्ण करनी होगी:

scala> val df = sc.parallelize(Seq(1,2,3,4,5,6,7,8,9)).toDF("column") 
// df: org.apache.spark.sql.DataFrame = [column: int] 

scala> val sequence = Seq(1,2,3,4,5) 
// sequence: Seq[Int] = List(1, 2, 3, 4, 5) 

scala> val result = df.filter(df("column").isin(sequence : _*)) 
// result: org.apache.spark.sql.DataFrame = [column: int] 

scala> result.show 
// +------+ 
// |column| 
// +------+ 
// |  1| 
// |  2| 
// |  3| 
// |  4| 
// |  5| 
// +------+ 
+0

यह भी मुझे समझने क्या http://stackoverflow.com/questions/6051302/ चल रहा था मदद की क्या-करता-कोलन-अंडरस्कोर-स्टार-डू-इन-स्कैला –

+0

यह सब स्कैला भाषा विशिष्टता में है। :) – eliasah

0

ऐसा इसलिए हो रहा है क्योंकि अंतर्निहित Scala implementation uses varargs, इसलिए जावा में प्रलेखन बिल्कुल सही नहीं है। यह @varargs एनोटेशन का उपयोग कर रहा है, ताकि आप just pass in an array.

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