[SCALA] 어떻게 목록 Column.isin를 사용 하는가?
SCALA어떻게 목록 Column.isin를 사용 하는가?
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)
해결법
-
==============================
1.문서에 따르면, ISIN는 가변 인자가 아닌 목록을합니다. 목록은 실제로 여기에 혼란 이름입니다. 이 같은 가변 인자에 목록을 변환 시도 할 수 있습니다 :
문서에 따르면, ISIN는 가변 인자가 아닌 목록을합니다. 목록은 실제로 여기에 혼란 이름입니다. 이 같은 가변 인자에 목록을 변환 시도 할 수 있습니다 :
val items = List("a", "b", "c") sqlContext.sql("select c1 from table") .filter($"c1".isin(items:_*)) .collect .foreach(println)
하나 개의 문자열이 가변 인자는 (인수의 수의 1로 동일) 또한이므로 된 mkString와 변형, 컴파일, 그러나 당신이 무엇을 달성하고자하는 proably 없습니다.
-
==============================
2.그것은 자바 API에서이 같은 일 (자바 8)
그것은 자바 API에서이 같은 일 (자바 8)
.isin(sampleListName.stream().toArray(String[]::new))));
sampleListName는 목록입니다
-
==============================
3.로 Tomalak는 언급했다 :
로 Tomalak는 언급했다 :
isin(java.lang.Object... list) A boolean expression that is evaluated to true if the value of this expression is contained by the evaluated values of the arguments.
따라서, 당신은 단지 다음과 같이 변경하고이 문제를 해결할 수 :
val items = List("a", "b", "c").map(c => s""""$c"""")
-
==============================
4.더 쉬운 방법
더 쉬운 방법
sqlContext.sql("select c1 from table") .filter($"c1".isin("a", "b", "c")) .collect .foreach(println)
당신이하지 않는 한 보통이 아니다 목록 값을 많이 보유하고 있습니다.
from https://stackoverflow.com/questions/32551919/how-to-use-column-isin-with-list by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 암시 적 변환의 결과 유형은 AnyRef보다 더 구체적이어야합니다 (0) | 2019.11.07 |
---|---|
[SCALA] 왜 SimpleDateFormat의 잘못된 날짜를 구문 분석 하는가? (0) | 2019.11.07 |
[SCALA] 미래의 내 보낸 (0) | 2019.11.07 |
[SCALA] 디폴트가 사용됩니다 암시하는 변환을 제어 할 수있는 방법이 있습니까? (0) | 2019.11.07 |
[SCALA] int로는 null이 될 수없는 경우, null.asInstanceOf [지능]은 무엇을 의미합니까? (0) | 2019.11.07 |