当前位置: 首页 > 知识库问答 >
问题:

使用Spark ML时VectorUDT出现问题

斜淳
2023-03-14

我正在编写一个UDAF,应用于Vector(spark.ml.linalg.Vector)类型的Spark数据帧列。我依赖spark.ml.linalg包,这样我就不必在数据帧和RDD之间来回穿梭。

在UDAF内部,我必须为输入、缓冲和输出模式指定数据类型:

def inputSchema = new StructType().add("features", new VectorUDT())
def bufferSchema: StructType =
    StructType(StructField("list_of_similarities", ArrayType(new VectorUDT(), true), true) :: Nil)

override def dataType: DataType = ArrayType(DoubleType,true) 

VectorUDT是我在spark.mllib.linalg.Vector中使用的:https://github . com/Apache/spark/blob/master/ml lib/src/main/Scala/org/Apache/spark/ml lib/Lina LG/vectors . Scala

然而,当我尝试从spark导入它时。改为:<code>导入org.apache.spark.ml.linalg。VectorUDT</code>我得到一个运行时错误(在构建期间没有错误):

class VectorUDT in package linalg cannot be accessed in package org.apache.spark.ml.linalg 

这是预期的/你能建议一个解决方法吗?

我正在使用Spark 2.0.0

共有1个答案

岳池暝
2023-03-14

在Spark 2.0.0中,正确的方法是使用<code>org.apache.Spark.ml.linalg.SQLDataTypes。VectorType而不是VectorUDT。它是在本期中介绍的。

 类似资料:
  • 我有一个数十万对象的列表。当每一个运行时,它都会根据给定的值执行一个可能很长的计算。正因为如此,我希望异步运行每个任务(最好是通过使用某种执行器),并在30秒后检索每次计算的结果,取消那些没有及时完成的结果。(所得值在其他地方使用。) 到目前为止,我就是这样实现它的: ArrayList存储每个要执行的,然后将其发送到ExecutorService以运行所有任务。我遇到的问题是,任务似乎是同步启动

  • 问题内容: 我在应用程序中使用Gson,为此,我使用了一些名称与使用Json相同的类。我的应用程序运行良好,但是在编写proguard时,应用程序崩溃了,我猜有些类正在缩小。我的错误是: java.lang.ClassCastException:com.google.gson.internal.StringMap无法转换为com.sample.package.GsonClass 问题答案: 您需要

  • 我在使用SpecifyKind时遇到问题。我发现,如果我将字符串(“O”)应用于DateTime.Now或new DateTime(),则会使spantime不同。我不知道这是怎么可能的。我尝试将这些日期时间保存为数据库中的Utc,但由于跨度不同,时间将不正确。 我就是这样做的: 现在:2021-12-08 13:40:35现在:2021-12-08T13:40:35.1159209 01:00日

  • 我使用的是NetBeans 8.1,我有一个SpringBoot项目,它具有以下依赖项: 它们都是在依赖项中正确下载的。 该项目有3个java类和一个扩展JpaRepository的接口 在src/main/资源项下- 在html标签上,我有错误:本地名称为“xmlns: th不可序列化为XML 1.0的属性。如果我试图运行该项目并转到http://localhost:8080/页面,我有一个白标

  • 我已经实现了一个自定义的Keycloak UserStorageProvider SPI(以下是官方文档https://www.Keycloak.org/docs/latest/server_development/index.html#_user-storage-spi的第11点),它执行以下操作: 根据外部身份验证服务对用户(以前不存在于本地存储中)进行身份验证。 将(针对自定义服务成功进行身

  • 请问这是什么原因? 官方文档里的代码复制下来也是错误的