替换spark Dataframe中所有列名称中的空格

时间:2016-03-15 17:24:36

标签: scala apache-spark apache-spark-sql spark-dataframe

我的某些列名中有空格的spark数据帧,必须用下划线替换。

我知道可以在sparkSQL中使用withColumnRenamed()重命名单个列,但要重命名'n'个列,此函数必须链接'n'次(据我所知)。

为了实现自动化,我尝试过:

val old_names = df.columns()        // contains array of old column names

val new_names = old_names.map { x => 
   if(x.contains(" ") == true) 
      x.replaceAll("\\s","_") 
   else x 
}                    // array of new column names with removed whitespace.

现在,如何用new_names

替换df的标头

5 个答案:

答案 0 :(得分:11)

  var newDf = df
  for(col <- df.columns){
    newDf = newDf.withColumnRenamed(col,col.replaceAll("\\s", "_"))
  }

您可以将其封装在一些方法中,这样就不会有太多污染。

答案 1 :(得分:9)

在Python中,可以通过以下代码完成:

{{1}}

答案 2 :(得分:7)

这是使用foldLeft

的单个班轮

val newDf = df.columns.foldLeft(df)((curr, n) => curr.withColumnRenamed(n, n.replaceAll("\\s", "_")))

纠正一个小错字。添加括号

答案 3 :(得分:3)

您可以在python中做完全相同的事情:

raw_data1 = raw_data
for col in raw_data.columns:
  raw_data1 = raw_data1.withColumnRenamed(col,col.replace(" ", "_"))

答案 4 :(得分:0)

在Scala中,这是实现相同目标的另一种方法-

    import org.apache.spark.sql.types._

    val df_with_newColumns = spark.createDataFrame(df.rdd, 
StructType(df.schema.map(s => StructField(s.name.replaceAll(" ", ""), 
s.dataType, s.nullable))))

希望这会有所帮助!