Spark的Column.isin函数不带List
我正在尝试从Spark Dataframe中过滤出行。
val sequence = Seq(1,2,3,4,5) df.filter(df("column").isin(sequence))
不幸的是,我得到了一个不受支持的文字类型错误
java.lang.RuntimeException: Unsupported literal type class scala.collection.immutable.$colon$colon List(1,2,3,4,5)
根据文档,它采用scala.collection.Seq列表
我想我不想要文字? 然后我可以接受什么样的包装类呢?
@ JustinPihony的答案是正确的,但它不完整。 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| // +------+
发生这种情况是因为底层的Scala实现使用了varargs
,因此Java中的文档并不完全正确。 它使用@varargs
注释,因此您只需传入一个数组。
- 将JavaRDD转换为DataFrame时出现Spark错误:java.util.Arrays $ ArrayList不是数组模式的有效外部类型
- 连接到远程Spark master – Java / Scala
- Java,Spark和Cassandra java.lang.ClassCastException:com.datastax.driver.core.DefaultResultSetFuture无法转换为阴影
- 使用saveAsTextFile的Spark NullPointerException
- SparkSQL并在Java中的DataFrame上爆炸
- Java中Spark MLlib中的矩阵运算
- 在同一JVM中检测到多个SparkContext
- 是否存在查看相邻元素的RDD转换函数?
- 在Spark Web UI中看不到完成的作业