Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
Spark2 Scala数据帧列重命名需要非常长的时间_Scala_Apache Spark_Dataframe_Apache Spark Sql - Fatal编程技术网

Spark2 Scala数据帧列重命名需要非常长的时间

Spark2 Scala数据帧列重命名需要非常长的时间,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,重命名数据帧列的最佳/最快方法是什么 我注意到~.withColumnRename函数在重命名多个列时性能非常差,无论数据帧的大小如何,它也不使用任何执行器 我错过了什么 以下是我的情况: 我有一个JSON对象,在一个深度嵌套的结构中有数千个值。JSON结构中的变量名称不断重复: |-- taskData_data_variables: struct (nullable = true) | |-- ProcessId: string (nullable = true) | |-

重命名数据帧列的最佳/最快方法是什么

我注意到~.withColumnRename函数在重命名多个列时性能非常差,无论数据帧的大小如何,它也不使用任何执行器

我错过了什么

以下是我的情况: 我有一个JSON对象,在一个深度嵌套的结构中有数千个值。JSON结构中的变量名称不断重复:

 |-- taskData_data_variables: struct (nullable = true)
 |    |-- ProcessId: string (nullable = true)
 |    |-- CommentsReceived: struct (nullable = true)
 |    |    |-- @metadata: struct (nullable = true)
 |    |    |    |-- dirty: boolean (nullable = true)
 |    |    |    |-- invalid: boolean (nullable = true)
 |    |    |    |-- objectID: string (nullable = true)
 |    |    |    |-- shared: boolean (nullable = true)
 |    |    |-- items: array (nullable = true)
 |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |-- @metadata: struct (nullable = true)
 |    |    |    |    |    |-- className: string (nullable = true)
 |    |    |    |    |    |-- dirty: boolean (nullable = true)
 |    |    |    |    |    |-- invalid: boolean (nullable = true)
我现在需要将数据“分散”到列和一对多表中。作为该过程的一部分,我需要重命名列以保留其源元数据

在流程的第一次迭代结束时,我得到一个如下表:

|-- taskData_data_variables: struct (nullable = true)
|-- taskData_data_variables_ProcessId: string (nullable = true)
|-- taskData_data_variables_CommentsReceived: struct (nullable = true)
|-- taskData_data_variables_CommentsReceived_metadata: struct (nullable = true)
|-- taskData_data_variables_CommentsReceived_metadata_dirty: boolean (nullable = true)
|-- taskData_data_variables_CommentsReceived_metadata_invalid: boolean (nullable = true)
|-- taskData_data_variables_CommentsReceived_metadata_objectID: string (nullable = true)
|-- taskData_data_variables_CommentsReceived_metadata_shared: boolean (nullable = true)
|-- taskData_data_variables_CommentsReceived_metadata_items: array (nullable = true)
|    |    |    |-- element: struct (containsNull = true)
|    |    |    |    |-- @metadata: struct (nullable = true)
|    |    |    |    |    |-- className: string (nullable = true)
|    |    |    |    |    |-- dirty: boolean (nullable = true)
|    |    |    |    |    |-- invalid: boolean (nullable = true)
我的代码可以工作,但它需要永远,因为在嵌套级别的不同深度中有数百个这样的值

我还有一些代码,这些代码将获取数组并将其放在另一个表中

我只需要一些指导/最佳实践建议,以最有效的方式重命名这些列

代码如下:

var dataframeRenamed = spark.sql("SELECT * FROM some_table")
val dfNewSchema = dataframeRenamed.schema

for (renameField <- dfNewSchema) {
        dataframeRenamed = dataframeRenamed.withColumnRenamed(renameField.name, renameField.name + "_somethingElse")
}
var dataframerename=spark.sql(“从某些表中选择*)
val dfNewSchema=dataframeRenamed.schema

对于(renameField),您似乎忘记了包含我声称包含的代码(,)。我想了解为什么此操作需要如此长的时间。它在哪里运行?它做什么?有没有更好的方法重命名数据帧中的数千列?