Spark2 Scala数据帧列重命名需要非常长的时间
重命名数据帧列的最佳/最快方法是什么 我注意到~.withColumnRename函数在重命名多个列时性能非常差,无论数据帧的大小如何,它也不使用任何执行器 我错过了什么 以下是我的情况: 我有一个JSON对象,在一个深度嵌套的结构中有数千个值。JSON结构中的变量名称不断重复: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) | |-
|-- 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),您似乎忘记了包含我声称包含的代码(,)。我想了解为什么此操作需要如此长的时间。它在哪里运行?它做什么?有没有更好的方法重命名数据帧中的数千列?