Apache spark 我有一个表,把表作为数据框,需要的答案是spark scala
我有一个表,将表作为数据帧Apache spark 我有一个表,把表作为数据框,需要的答案是spark scala,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个表,将表作为数据帧 id | Formula | Step | Value | 1 | A*(B+C) | A | 5 | 1 | A*(B+C) | B | 6 | 1 | A*(B+C) | C | 7 | 2 | A/B | A | 12 | 2 | A/B | B | 6 | 预期结果数据帧 使用spark和scala所需的解决方案 id | Formula | Val
id | Formula | Step | Value |
1 | A*(B+C) | A | 5 |
1 | A*(B+C) | B | 6 |
1 | A*(B+C) | C | 7 |
2 | A/B | A | 12 |
2 | A/B | B | 6 |
预期结果数据帧
使用spark和scala所需的解决方案
id | Formula | Value |
1 | A*(B+C) | 65 |
2 | A/B | 2 |
我想要这样的答案:
id | Formula | Value |
1 | A*(B+C) | 65 |
2 | A/B | 2 |
您可以按公式分组,并将步长和值收集为键值对
scala> df.groupBy($"Formula").agg(collect_list(map($"Step",$"Value")) as "map").show(false)
+-------+---------------------------------------+
|Formula|map |
+-------+---------------------------------------+
|A*(B+C)|[Map(A -> 5), Map(B -> 6), Map(C -> 5)]|
|A/B |[Map(A -> 12), Map(B -> 6)] |
+-------+---------------------------------------+
现在您可以编写一个UDF来替换map over公式中的变量值并获得结果
val evalUDF = udf((valueMap: Map[String, Int], formula: String) => {
...
})
val output = df.withColumn("Value", evalUDF($"map", $"Formula"))
请提供更多的背景信息,了解您正在尝试做什么以及您已经尝试了什么。欢迎来到SO。为了让我们帮助您,请提供一些您正在尝试的内容,并向我们展示一些到目前为止您所尝试的示例代码。请给出解决方案。谢谢你的回答。我是新的火花与scala,所以,请写完整的自定义项。
val evalUDF = udf((valueMap: Map[String, Int], formula: String) => {
...
})
val output = df.withColumn("Value", evalUDF($"map", $"Formula"))