【问题标题】:Scala/Spark - Create Dataset with one column from another DatasetScala/Spark - 使用来自另一个数据集的一列创建数据集
【发布时间】:2020-10-12 19:09:53
【问题描述】:

我正在尝试创建一个只有一列来自案例类的数据集。

下面是代码:

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]  = ???
}

如代码的最后一行所示,我希望输出仅是具有Vector 类型和vectors 数据的第二列。

我试过了:

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

但是这一行突出显示错误No implicit arguments of type: Encoder[Vector]

如何解决?

【问题讨论】:

  • 你可以试试 result.select("vectors") 吗?
  • @Prateek result.select("vectors") 创建一个sql.DataFrame,但不是Dataset[Vector]。有什么想法吗?

标签: scala apache-spark


【解决方案1】:

我认为行:

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

应该做

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

正确

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多