gpt4 book ai didi

scala - 如何将 Column.isin 与列表一起使用?

转载 作者:行者123 更新时间:2023-12-03 05:45:26 27 4
gpt4 key购买 nike

val items = List("a", "b", "c")

sqlContext.sql("select c1 from table")
.filter($"c1".isin(items))
.collect
.foreach(println)

上面的代码抛出以下异常。

Exception in thread "main" java.lang.RuntimeException: Unsupported literal type class scala.collection.immutable.$colon$colon List(a, b, c) 
at org.apache.spark.sql.catalyst.expressions.Literal$.apply(literals.scala:49)
at org.apache.spark.sql.functions$.lit(functions.scala:89)
at org.apache.spark.sql.Column$$anonfun$isin$1.apply(Column.scala:642)
at org.apache.spark.sql.Column$$anonfun$isin$1.apply(Column.scala:642)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:35)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at org.apache.spark.sql.Column.isin(Column.scala:642)

下面是我尝试修复它的方法。它编译并运行但不返回任何匹配项。不知道为什么。

val items = List("a", "b", "c").mkString("\"","\",\"","\"")

sqlContext.sql("select c1 from table")
.filter($"c1".isin(items))
.collect
.foreach(println)

最佳答案

根据文档,isin 采用可变参数,而不是列表。 List在这里实际上是一个令人困惑的名字。您可以尝试将 List 转换为 vararg,如下所示:

val items = List("a", "b", "c")

sqlContext.sql("select c1 from table")
.filter($"c1".isin(items:_*))
.collect
.foreach(println)

您的 mkString 变体可以编译,因为一个 String 也是一个 vararg(参数数量等于 1),但这可能不是您想要实现的目标。

关于scala - 如何将 Column.isin 与列表一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com