如何从scala的标量中减去向量? [英] How to subtract vector from scalar in scala?

查看:93
本文介绍了如何从scala的标量中减去向量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个实木复合地板文件,其中包含两列(id,特征).我想从标量中减去特征,然后将输出除以另一个标量.镶木文件

I have parquet file which contain two columns (id,features).I want to subtract features from scalar and divide output by another scalar. parquet file

df.withColumn("features", ((df("features")-constant1)/constant2))

但是给我错误

要求失败:列数不匹配.老专栏名称(2):id,功能新列名称(1):功能该怎么解决?

requirement failed: The number of columns doesn't match. Old column names (2): id, features New column names (1): features How to solve it?

推荐答案

我的scala火花代码如下.对向量sparkm数据类型执行任何操作的唯一方法是强制转换为字符串.还使用UDF进行减法和除法.

My scala spark code to this as below . Only way to do any operation on vector sparkm datatype is casting to string. Also used UDF to perform subtraction and division.

import spark.implicits._
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.functions.udf
import org.apache.spark.sql.functions._
var df = Seq((1, Vectors.dense(35)),
  (2, Vectors.dense(45)),
  (3, Vectors.dense(4.5073)),
  (4, Vectors.dense(56)))
  .toDF("id", "features")
df.show()
val constant1 = 10
val constant2 = 2
val performComputation = (s: Double, val1: Int, val2: Int) => {
  Vectors.dense((s - val1) / val2)
}
val performComputationUDF = udf(performComputation)
df.printSchema()
df = df.withColumn("features",
  regexp_replace(df.col("features").cast("String"),
    "[\\[\\]]", "").cast("Double")
)

df = df.withColumn("features",
  performComputationUDF(df.col("features"),
    lit(constant1), lit(constant2))
)
df.show(20, false)

// Write State should with mode overwrite
df.write
  .mode("overwrite")
  .parquet("file:///usr/local/spark/dataset/output1/")

结果

+---+----------+
|id |features  |
+---+----------+
|1  |[12.5]    |
|2  |[17.5]    |
|3  |[-2.74635]|
|4  |[23.0]    |
+---+----------+

这篇关于如何从scala的标量中减去向量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆