【发布时间】:2020-07-28 21:58:40
【问题描述】:
我正在使用 spark-sql-2.4.1v 如何进行各种连接取决于列的值
样本数据
val data = List(
("20", "score", "school", 14 ,12),
("21", "score", "school", 13 , 13),
("22", "rate", "school", 11 ,14)
)
val df = data.toDF("id", "code", "entity", "value1","value2")
+---+-----+------+------+------+
| id| code|entity|value1|value2|
+---+-----+------+------+------+
| 20|score|school| 14| 12|
| 21|score|school| 13| 13|
| 22| rate|school| 11| 14|
| 21| rate|school| 13| 12|
基于我需要与其他各种表连接的“代码”列值
val rateDs = // val data1= List(
("22", 11 ,A),
("22", 14 ,B),
("20", 13 ,C),
("21", 12 ,C),
("21", 13 ,D)
)
val df = data1.toDF("id", "map_code","map_val")
val scoreDs = // scoreTable
如果“code”列的值为“rate”,我需要加入 rateDs 如果“code”列值为“score”,我需要加入 scoreDs
如何在 spark 中处理这些事情?有什么最佳方法可以实现这一目标?
“比率”字段的预期结果
+---+-----+------+------+------+
| id| code|entity|value1|value2|
+---+-----+------+------+------+
| 22| rate|school| A| B |
| 21| rate|school| D| C |
【问题讨论】:
-
您可以过滤出两个数据框,与其他数据框合并并再次合并
-
@koiralo 谢谢,可以使用“when”子句吗?
标签: apache-spark apache-spark-sql