我对Spark和Scala还是很陌生,但是对Java非常熟悉。我有一些Java jar,它具有一个返回Integers列表(java.util.List)的函数,但是我想将它们转换为spark数据集,以便可以将其附加到另一列,然后执行联接。有没有简单的方法可以做到这一点?我已经尝试过类似以下代码的事情:
val testDSArray : java.util.List[Integer] = new util.ArrayList[Integer]()
testDSArray.add(4)
testDSArray.add(7)
testDSArray.add(10)
val testDS : Dataset[Integer] = spark.createDataset(testDSArray, Encoders.INT())
但是它给了我编译器错误(无法解决重载方法)?
答案 0 :(得分:3)
如果您查看type signature,您会发现在 Scala 中,编码器在第二个(隐式)参数列表中传递。
您可以:
将其传递到另一个参数列表中。
val testDS = spark.createDataset(testDSArray)(Encoders.INT)
不要通过它,而保留 Scala 的隐式机制可以解决该问题。
import spark.implicits._
val testDS = spark.createDataset(testDSArray)
首先将 Java 的列表转换为 Scala 的列表。
import collection.JavaConverters._
import spark.implicits._
val testDS = testDSArray.asScala.toDS()