【发布时间】:2019-01-08 00:24:09
【问题描述】:
我想在 Spark DataFrame 中跨列创建一个 sumproduct。我有一个如下所示的 DataFrame:
id val1 val2 val3 val4
123 10 5 7 5
我还有一张地图,看起来像:
val coefficents = Map("val1" -> 1, "val2" -> 2, "val3" -> 3, "val4" -> 4)
我想获取 DataFrame 每一列中的值,将其乘以映射中的相应值,然后在新列中返回结果,因此本质上是:
(10*1) + (5*2) + (7*3) + (5*4) = 61
我试过这个:
val myDF1 = myDF.withColumn("mySum", {var a:Double = 0.0; for ((k,v) <- coefficients) a + (col(k).cast(DoubleType)*coefficients(k));a})
但出现“+”方法被重载的错误。即使我解决了这个问题,我也不确定这是否可行。有任何想法吗?我总是可以动态地将 SQL 查询构建为文本字符串并以这种方式进行,但我希望能更有说服力。
感谢任何想法。
【问题讨论】:
标签: scala apache-spark dataframe apache-spark-sql