如何在Spark scala中优化withColumn?
我是Spark和Scala的新手,我想优化我在Spark上写的一个请求,这个请求非常繁重且缓慢(我的数据库非常庞大,它包含大量数据) 我有第一张表“城市ID”: 以及第二个表“city_name”,该表与第一个表有一个公共字段:如何在Spark scala中优化withColumn?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我是Spark和Scala的新手,我想优化我在Spark上写的一个请求,这个请求非常繁重且缓慢(我的数据库非常庞大,它包含大量数据) 我有第一张表“城市ID”: 以及第二个表“city_name”,该表与第一个表有一个公共字段: City_Code City_NAME_CRYPT 10 ADFKJV - Paris 11 AGHDFBNLKFJ - London 12 AGZEORIUYG- Madrid 在我的最终结果中,我想要的是城市
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
你能帮我解决这个问题吗?
提前谢谢你 我认为这并不是让它变慢的原因。但是你可以像这样使用WithColumnName
result.withColumnRename(“name”,regexp\u extract($“name\u crypt”,“*?(\\d+\ \)$”,1))
如果你是一个新手,很多人一开始都不会把任务并行化。也许您应该确保任务的并行化是好的。检查num执行器
和执行器内存
下面是spark提交命令的示例
spark-submit \
--class yourClass \
--master yarn \
--deploy-mode cluster \
--executor-memory 8G \
--num-executors 40 \
/path/to/myJar.jar
我想这并不是让它变慢的原因。但是你可以像这样使用WithColumnName
result.withColumnRename(“name”,regexp\u extract($“name\u crypt”,“*?(\\d+\ \)$”,1))
如果你是一个新手,很多人一开始都不会把任务并行化。也许您应该确保任务的并行化是好的。检查num执行器
和执行器内存
下面是spark提交命令的示例
spark-submit \
--class yourClass \
--master yarn \
--deploy-mode cluster \
--executor-memory 8G \
--num-executors 40 \
/path/to/myJar.jar
你的代码是对的,你对此无能为力。若您的应用程序运行缓慢,若节点上的资源较少,则必须垂直扩展,或者增加工作节点。您的代码是正确的,对此您无能为力。若应用程序运行缓慢,若节点上的资源较少,则必须垂直扩展,或者增加工作节点。