Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Spark scala中优化withColumn?_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

如何在Spark scala中优化withColumn?

如何在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 在我的最终结果中,我想要的是城市

我是Spark和Scala的新手,我想优化我在Spark上写的一个请求,这个请求非常繁重且缓慢(我的数据库非常庞大,它包含大量数据)

我有第一张表“城市ID”:

以及第二个表“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

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

我认为这并不是让它变慢的原因。但是你可以像这样使用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 

你的代码是对的,你对此无能为力。若您的应用程序运行缓慢,若节点上的资源较少,则必须垂直扩展,或者增加工作节点。您的代码是正确的,对此您无能为力。若应用程序运行缓慢,若节点上的资源较少,则必须垂直扩展,或者增加工作节点。