scala 中的 MinMax 归一化

2023-11-23

我有一个包含多列的 org.apache.spark.sql.DataFrame 。我想使用 MinMax 归一化或任何技术来缩放 1 列 (lat_long_dist) 以在 -1 和 1 之间缩放数据并将数据类型保留为 org.apache.spark.sql.DataFrame

scala> val df = sqlContext.csvFile("tenop.csv")
df: org.apache.spark.sql.DataFrame = [gst_id_matched: string,
  ip_crowding: string, lat_long_dist: double, stream_name_1: string]

我找到了 StandardScaler 选项,但这需要先转换数据集,然后才能进行转换。是否有一种简单干净的方法。


当您已经在使用 Spark 时,这是另一个建议。

为什么不在 ml 包中使用 MinMaxScaler ?

让我们用 Zero323 中的相同示例来尝试一下。

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.ml.feature.MinMaxScaler
import org.apache.spark.sql.functions.udf

val df = sc.parallelize(Seq(
  (1L, 0.5), (2L, 10.2), (3L, 5.7), (4L, -11.0), (5L, 22.3)
)).toDF("k", "v")

//val df.map(r => Vectors.dense(Array(r.getAs[Double]("v"))))

val vectorizeCol = udf( (v:Double) => Vectors.dense(Array(v)) )
val df2 = df.withColumn("vVec", vectorizeCol(df("v"))

val scaler = new MinMaxScaler()
    .setInputCol("vVec")
    .setOutputCol("vScaled")
    .setMax(1)
    .setMin(-1)

scaler.fit(df2).transform(df2).show
+---+-----+-------+--------------------+
|  k|    v|   vVec|             vScaled|
+---+-----+-------+--------------------+
|  1|  0.5|  [0.5]|[-0.3093093093093...|
|  2| 10.2| [10.2]|[0.27327327327327...|
|  3|  5.7|  [5.7]|[0.00300300300300...|
|  4|-11.0|[-11.0]|              [-1.0]|
|  5| 22.3| [22.3]|               [1.0]|
+---+-----+-------+--------------------+

利用一次缩放多个列的优势。

val df = sc.parallelize(Seq(
    (1.0, -1.0, 2.0),
    (2.0, 0.0, 0.0),
    (0.0, 1.0, -1.0)
)).toDF("a", "b", "c")

import org.apache.spark.ml.feature.VectorAssembler

val assembler = new VectorAssembler()
    .setInputCols(Array("a", "b", "c"))
    .setOutputCol("features")

val df2 = assembler.transform(df)

// Reusing the scaler instance above with the same min(-1) and max(1) 
scaler.setInputCol("features").setOutputCol("scaledFeatures").fit(df2).transform(df2).show
+---+----+----+--------------+--------------------+
|  a|   b|   c|      features|      scaledFeatures|
+---+----+----+--------------+--------------------+
|1.0|-1.0| 2.0|[1.0,-1.0,2.0]|      [0.0,-1.0,1.0]|
|2.0| 0.0| 0.0| [2.0,0.0,0.0]|[1.0,0.0,-0.33333...|
|0.0| 1.0|-1.0|[0.0,1.0,-1.0]|     [-1.0,1.0,-1.0]|
+---+----+----+--------------+--------------------+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala 中的 MinMax 归一化 的相关文章

随机推荐

  • Spring - 是否可以在同一应用程序中使用多个事务管理器?

    我是 Spring 新手 我想知道是否可以在同一个应用程序中使用多个事务管理器 我有两个数据访问层 一个用于两个数据库 我想知道 如何在一层使用一个事务管理器 在另一层使用不同的事务管理器 我还不需要跨两个数据库执行事务 但我确实需要在每个
  • 在方法内部等待,直到捕获事件

    我在 C 中的一个方法上遇到了这个问题 我创建了一个从 dll 中调用函数的方法 其名为Phone GetLampMode Now Phone GetLampMode不返回任何东西 数据在事件中返回 onGetLampModeRespons
  • shell脚本中的“${!var}”是什么意思? [复制]

    这个问题在这里已经有答案了 我有一个具有以下条件的代码块 不确定它到底是做什么的 var args Some Text if var then echo var is not defined fi 这称为变量间接扩展 hello this
  • Android:如何获取按名称或按日期降序排列的目录列表?

    我能够做到这一点 File images new File path File imageList images listFiles new FilenameFilter public boolean accept File dir Str
  • Python 中的可索引弱有序集

    我想知道是否有一种简单的方法可以在 Python 中构建可索引的弱有序集 我尝试自己建造一个 这是我想出的 An indexable ordered set of objects which are held by weak referen
  • 将大型 *.war 部署到 tomcat 的最佳方式

    在开发过程中 我经常需要将一个大的 war 文件 45 MB 部署到远程测试服务器 通常我使用 scp 将文件复制到服务器 WEB INF lib 文件夹构成了 war 文件的最大部分 其中包括所有必需的库 spring apache cx
  • 如果内部div具有特定类,如何使用javascript隐藏父div

    好吧 假设我有很多 div 有些 div 的孩子有一个班级 其他 div 的孩子有不同的班级 我只想隐藏具有某个类别的孩子的 div 例如 div class mainDiv div class kulkul div class child
  • 通过反射向类添加新方法[重复]

    这个问题在这里已经有答案了 java中是否可以通过反射向类添加方法 public class BaseDomain public BaseDomain Field fields this getClass getDeclaredFields
  • 使用自签名证书从 https 服务器进行 React-native fetch()

    我正在尝试与具有自签名证书的 https 服务器进行通信 我可以从 NET 应用程序 使用 ServicePointManager ServerCertificateValidationCallback 事件 本机 iOs 应用程序 使用
  • 包装 malloc - C

    我是 C 初学者 在阅读 git 的源代码时 我发现了这个包装函数malloc void xmalloc size t size void ret malloc size if ret size ret malloc 1 if ret re
  • CSS文本装饰下划线颜色[重复]

    这个问题在这里已经有答案了 可能的重复 更改下划线颜色 是否可以仅更改文本下的线条颜色 我希望看到类似红色字母 下面有一条蓝线的东西 但我不知道如何完成此操作 对于谷歌同事 复制自重复的问题 这个答案已经过时了文字装饰颜色现在大多数现代浏览
  • Android O - 旧的启动前台服务仍然有效?

    因此 对于 Android O 如果您希望每小时接收的不仅仅是几次位置更新 您需要将服务作为前台服务运行 我注意到启动前台服务的旧方法似乎确实适用于 O IE startForeground NOTIFICATION ID getNotif
  • C++ 中接受“任何内容”的模板

    我有一个简单的模板结构 将字符串与值关联起来 template
  • 调用不存在的端点时收到 403 而不是 404

    这是 Spring Security 配置的典型部分 Override protected void configure HttpSecurity http throws Exception http csrf and cors disab
  • Apache HttpClient 和 PEM 证书文件

    我想以编程方式访问需要客户端证书的网站 该证书位于 PEM 文件中 在此应用程序中 我不想将它们添加到我的密钥库中 如果可以避免的话 请使用 keytool 或 openssl 我需要直接在代码中处理它们 HttpClient httpcl
  • 弹出窗口在关闭时将数据返回给父级

    我使用打开了一个弹出窗口window open 我现在想要的是用户能够单击这个新窗口中的两个链接之一 允许 或 不允许 当用户单击这些链接之一时 弹出 窗口应该关闭 并返回 允许 或 不允许 或类似的内容 true false就可以了 到父
  • 在 Inno Setup 脚本上安装 MySQL 并加载数据库

    我在 Stack Overflow 上读了很多文档 你们太棒了 我采用了另一篇文章中建议的一些代码 帮助很大 感谢 RobeN 我能够加载并启动 MySQL 不过 我确实阅读了建议将数据库自动加载到序列中的文档 我似乎无法弄清楚 任何帮助都
  • document.all 和 document.layers 现在已过时

    我正在使用一些 旧的 本机 javascript 并且遇到了 document getElementById document all 和 document layers 的分离 据我所知 document all 和 document l
  • Android 多个同步适配器项目(例如 Google 帐户)?

    我目前已将 Android 应用程序设置为使用 Android 的 AccountManager 功能 使用 SyncAdapter 和经过身份验证的帐户自动执行同步 我只运行 1 个同步适配器 用于同步所有内容 但我想将其分开 以便以不同
  • scala 中的 MinMax 归一化

    我有一个包含多列的 org apache spark sql DataFrame 我想使用 MinMax 归一化或任何技术来缩放 1 列 lat long dist 以在 1 和 1 之间缩放数据并将数据类型保留为 org apache s