【发布时间】:2020-07-20 09:49:05
【问题描述】:
我想根据 Scala 映射表示的配置转换我的数据框中的一些列。
我有两个案例:
- 接收映射
Map[String, Seq[String]]和 col1、col2 列,如果映射中有 key = col1 的实体,并且 col2 在此实体值列表中,则转换 col3。 - 接收映射
Map[String, (Long, Long)和col1,col2,转换col3 if 映射中有一个实体,其键 = col1 和 col2 在 Longs 的元组描述为 (start, end) 的范围内。
例子:
案例 1 有这张表,还有一张地图 Map(u1-> Seq(w1,w11), u2 -> Seq(w2,w22))
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| u1 | w1 | v1 |
+------+------+------+
| u2 | w2 | v2 |
+------+------+------+
| u3 | w3 | v3 |
+------+------+------+
我想在 col3 中添加“x-”前缀,前提是它与术语匹配
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| u1 | w1 | x-v1 |
+------+------+------+
| u2 | w2 | x-v2 |
+------+------+------+
| u3 | w3 | v3 |
+------+------+------+
案例 2: 这个表和地图 Map("u1" -> (1,5), u2 -> (2, 4))
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| u1 | 2 | v1 |
+------+------+------+
| u1 | 6 | v11 |
+------+------+------+
| u2 | 3 | v3 |
+------+------+------+
| u3 | 4 | v3 |
+------+------+------+
预期的输出应该是:
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| u1 | 2 | x-v1 |
+------+------+------+
| u1 | 6 | v11 |
+------+------+------+
| u2 | 3 | x-v3 |
+------+------+------+
| u3 | 4 | v3 |
+------+------+------+
这可以通过 UDF 轻松完成,但出于性能考虑,我不想使用它们。
有没有办法在 Spark 2.4.2 中实现它?
谢谢
【问题讨论】:
-
您还可以添加示例输入和预期输出吗? & 什么火花版本??
-
@Srinivas 示例已添加,谢谢
-
火花版??
-
@Srinivas Spark 2.4.2
-
可以吗,如果我把这个
Map("u1" -> (1,5), u2 -> (2, 4))转换成Map("u1" -> Seq(1,5), u2 -> Seq(2, 4))?
标签: apache-spark apache-spark-sql