Spark Scala:如何根据向量的每个位置更新数据帧的每一列
我有这样一个DF:Spark Scala:如何根据向量的每个位置更新数据帧的每一列,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我有这样一个DF: +--------------------+-----+--------------------+ | col_0|col_1| col_2| +--------------------+-----+--------------------+ |0.009069428120139292| 0.3|9.015488712438252E-6| |0.008070826019024355| 0.4|3.3796960513
+--------------------+-----+--------------------+
| col_0|col_1| col_2|
+--------------------+-----+--------------------+
|0.009069428120139292| 0.3|9.015488712438252E-6|
|0.008070826019024355| 0.4|3.379696051366339...|
|0.009774715414895803| 0.1|1.299590589291292...|
|0.009631155146285946| 0.9|1.218569739510422...|
和两个向量:
v1[7.0,0.007,0.052]
v2[804.0,553.0,143993.0]
列的总数与每个向量中的位置总数相同。
如何使用保存在第i个位置的数字应用方程式进行计算以更新DF的当前值(在第i个位置)?我的意思是,我需要更新DF中的所有值,使用向量中的值 也许这就是你想要的
import org.apache.spark.sql.Column
import org.apache.spark.sql.DataFrame
val df = Seq((1,2,3),(4,5,6)).toDF
val updateVector = Vector(10,20,30)
val updateFunction = (columnValue: Column, vectorValue: Int) => columnValue * lit(vectorValue)
val updateColumns = (df: DataFrame, updateVector: Vector[Int], updateFunction:((Column, Int) => Column)) => {
val columns = df.columns
updateVector.zipWithIndex.map{case (updateValue, index) => updateFunction(col(columns(index)), updateVector(index)).as(columns(index))}
}
val dfUpdated = df.select(updateColumns(df, updateVector, updateFunction) :_*)
dfUpdated.show
+---+---+---+
| _1| _2| _3|
+---+---+---+
| 10| 40| 90|
| 40|100|180|
+---+---+---+
你能给我们具体的例子说明计算结果吗?一个预期的数据帧将尽可能地复制@RameshMaharjan,我以前无法添加该信息,但是,在USER 2682459给出的答案中,有一个很好的例子。如果你的答案对你有帮助,那么你应该考虑一下:“-<代码> UpDeVector Eng/<代码>可能是“代码> org。Apache。Skop.ML.LIALG.Vector @ USS6910411从未使用过ML,但是快速查看LIALG.vector表示我的答案是很容易适应。如果OP澄清了,我会很高兴地更新它:)