当前位置: 首页 > 知识库问答 >
问题:

基于csv重命名火花数据帧的列名

柳项明
2023-03-14

我有麻烦重命名基于csv的数据帧的标头。

我得到了以下数据帧:df1:

Att1   Att2     Att3   
23      m        0      
22      m        1      
42      f        0   
32      f        0    
45      m        1    

现在我想根据csv文件更改列名(第一行),如下所示:

Att1,age
Att2,gender      
Att3,employed 
...,...    
Att99,colnameY     
Att100,colnameZ

因此,我期望数据帧如下所示:

age   gender    employed   
23      m        0      
22      m        1      
42      f        0   
32      f        0    
45      m        1    

有什么想法吗?感谢您的帮助:)

共有1个答案

白和泽
2023-03-14
import scala.io.Source.fromFile

// read in the names map from old names to new names
val map = fromFile("names.csv").getLines.map(line => {
    val fields = line.split(",")
    (fields(0), fields(1)) 
}).toMap
// map: scala.collection.immutable.Map[String,String] = Map(Att1 -> age, Att2 -> gender, Att3 -> employed)

// rename columns using withColumnRenamed
df1.columns.foldLeft(df1){ 
    case (df, col) => df.withColumnRenamed(col, map.getOrElse(col, col)) 
}.show
+---+------+--------+
|age|gender|employed|
+---+------+--------+
| 23|     m|       0|
| 22|     m|       1|
| 42|     f|       0|  
| 32|     f|       0|
| 45|     m|       1|
+---+------+--------+
 类似资料:
  • 并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?

  • 以下脚本: Floor1正在正确执行,Floor2使用相同的df执行,但使用重命名的列则不正确。我得到一个关键错误: 我知道,有一个类似的问题:重命名列后get keyerror 但我并没有真正得到答案,更重要的是,我没有找到解决办法。

  • 我想将以下数据框的第1列重命名为“Ref”。我有很多列,因此无法重命名每个列或为每个列设置名称。 这是数据帧 现在我想将第一列重命名为'Ref'。我试过这个 它重命名所有标题与列[1]相似的列。

  • 我想在spark中读取一个CSV,将其转换为DataFrame,并使用将其存储在HDFS中 在Apache Spark中将CSV文件加载为DataFrame的正确命令是什么?

  • 我正在尝试使用Databricks的spark-csv2.10依赖关系将一个数据帧写入到HDFS的*.csv文件。依赖关系似乎可以正常工作,因为我可以将.csv文件读入数据帧。但是当我执行写操作时,我会得到以下错误。将头写入文件后会出现异常。 当我将查询更改为时,write工作很好。 有谁能帮我一下吗? 编辑:根据Chandan的请求,这里是的结果

  • 我正在用PySpark DataFrames分析一些数据。假设我有一个正在聚合的数据帧< code>df: 这将给我: 聚合工作得很好,但我不喜欢新的列名。有没有办法将此列重命名为人类可以从方法中读取的内容?也许更类似于中的操作: