我是 Spark 和 Scala 的新手,我想优化我在 Spark 上编写的请求,该请求非常繁重且缓慢(我的数据库很大,并且包含大量数据)。
我有第一个表“city_ID”:
ID City_CODE
1 10
2 11
3 12
第二个表“city_name”与第一个表有一个公共字段:
City_Code City_NAME_CRYPT
10 ADFKJV - Paris
11 AGHDFBNLKFJ - London
12 AGZEORIUYG- Madrid
我想在最终结果中得到的是城市 id 和它的正确名称(我可以使用 city_name 字段上的正则表达式计算),没有任何其他数据。所以,它应该是这样的:
ID NAME
10 Paris
11 London
12 Madrid
这是我当前的代码:
val result = spark.sql(""" SELECT t1.id, t2.city_name_crypt AS name_crypt
FROM table1 t1
INNER JOIN table2
on t1.city_code = t2.city_code""").withColumn("name", regexp_extract($"name_crypt", ".*?(\\d+)\\)$", 1)).drop($"name_crypt").show()
对我来说最大的问题是我只想有 2 列,而不是 3!但是由于我进行了内部连接,因此我不得不将第三列保留在我的数据框中,而在我的情况下它是无用的。这就是为什么我在 with column 方法之后使用 drop 的原因。
你能帮我解决这个问题吗?先感谢您!