如何在Spark scala中使用Column进行优化



我是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 列方法之后使用下降的原因。

你能帮我解决这个问题吗?提前谢谢你!

我认为

这不是让它变慢的原因。 但是你可以像这样使用列重命名...

result.withColumnRenamed("name", regexp_extract($"name_crypt", ".*?(\d+)\)$", 1))

如果你是Spark的新手,很多人一开始不会并行化任务。也许你应该确保任务的并行化是好的。检查num-executorsexecutor-memory

https://spark.apache.org/docs/latest/configuration.html

下面是一个示例 火花提交命令...

spark-submit 
  --class yourClass 
  --master yarn 
  --deploy-mode cluster   
  --executor-memory 8G 
  --num-executors 40 
  /path/to/myJar.jar 

相关内容

  • 没有找到相关文章

最新更新