从java.util.List转换为Spark数据集

时间:2019-01-28 16:28:54

标签: scala apache-spark

我对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())

但是它给了我编译器错误(无法解决重载方法)?

1 个答案:

答案 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()