Scala/Spark-使用另一个数据集中的一列创建数据集

Scala/Spark-使用另一个数据集中的一列创建数据集,scala,apache-spark,Scala,Apache Spark,我正在尝试从Case类创建一个只有一列的数据集 代码如下: case class vectorData(value: Array[String], vectors: Vector) def main(args: Array[String]) { val spark = SparkSession.builder .appName("Hello world!") .master("local[*]") .getO

我正在尝试从Case类创建一个只有一列的数据集

代码如下:

case class vectorData(value: Array[String], vectors: Vector)


def main(args: Array[String]) {
    val spark = SparkSession.builder
      .appName("Hello world!")
      .master("local[*]")
      .getOrCreate()
    import spark.implicits._
    //blah blah and read data etc. 
    val word2vec = new Word2Vec()
        .setInputCol("value").setOutputCol("vectors")
        .setVectorSize(5).setMinCount(0).setWindowSize(5)
    val dataset = spark.createDataset(data)

    val model = word2vec.fit(dataset)


    val encoder = org.apache.spark.sql.Encoders.product[vectorData]
    val result = model.transform(dataset).as(encoder)

    //val output: Dataset[Vector]  = ???
}

如代码的最后一行所示,我希望输出仅为第二列,该列具有向量类型和向量数据

我试过:

val output = result.map(o => o.vectors)
但这一行突出显示了错误,没有类型为Encoder[Vector]的隐式参数

如何解决这个问题?

我认为行:

implicit val vectorEncoder: Encoder[Vector] = org.apache.spark.sql.Encoders.product[Vector]
应该

val output = result.map(o => o.vectors)
正确

我认为行:

implicit val vectorEncoder: Encoder[Vector] = org.apache.spark.sql.Encoders.product[Vector]
应该

val output = result.map(o => o.vectors)

正确

您能试试结果吗?selectvectors?@Prateek result.selectvectors创建一个sql.DataFrame,但不是Dataset[Vector]。有什么想法吗?你能试试result.selectvectors吗?@Prateek result.selectvectors创建一个sql.DataFrame,但不是Dataset[Vector]。有什么想法吗?