使用scala读取子查询spark sql中的数组

使用scala读取子查询spark sql中的数组,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我试图在spark sql中使用scala实现这个查询 SELECT * FROM employees WHERE emp_id IN (SELECT emp_id FROM employees WHERE SALARY > 200) ; 我已将oracle表映射到spark数据帧 val employees = sqlContext.load("jdbc", Map("url" -> "jdbc:oracle:thin

我试图在spark sql中使用scala实现这个查询

SELECT * FROM  employees
 WHERE emp_id IN (SELECT emp_id 
              FROM employees
              WHERE SALARY > 200) ;
我已将oracle表映射到spark数据帧

val employees = sqlContext.load("jdbc", Map("url" -> "jdbc:oracle:thin:client/password@localhost:1521:orcldb1", "dbtable" -> "client.EMPLOYEE"));
子查询的输出如下

scala> employees.where($"salary" > 100).select($"emp_id").collect().map{ row=>row.get(0)}

res3: Array[Any] = Array(6, 7, 8, 9, 10, 4, 2, 3, 5)
执行整个查询时出现以下错误

 employees.where($"emp_id" in (employees.where($"salary" > 100).select($"emp_id").collect())).show
警告:有1个弃用警告;有关详细信息,请使用-deprecation重新运行
java.lang.RuntimeException:不支持的文本类型类[Ljava.lang.Object;[Ljava.lang.Object;@129df247
位于org.apache.spark.sql.catalyst.expressions.Literal$.apply(literals.scala:49)
位于org.apache.spark.sql.functions$.lit(functions.scala:89)
位于org.apache.spark.sql.Column$$anonfun$isin$1.apply(Column.scala:642)
位于org.apache.spark.sql.Column$$anonfun$isin$1.apply(Column.scala:642)
位于scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
位于scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
在scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
我得到了答案

val items = employees.where($"salary" > 100).select($"emp_id").collect().map{ row=>row.get(0)}
我唯一改变的是,我使用了isin而不是in

employees.filter($"emp_id".isin(items:_*)).show

不,这不是我期望的答案。其他一些选择: