如何解决替换特殊字符“”在scala的数据框列名称中带有“-”
我也想用"BMU 1 Cell 1 Temp. (C)"
替换"BMU_1_Cell_1_Temp_C"
,并键入将列加倍。
尝试了以下选项:
- 以单引号提供列名
val df= df1.withColumn("`BMU 1 Cell 1 Temp. (C)`",col("`BMU 1 Cell 1 Temp. (C)`").cast("Double")).withColumnRenamed("`BMU 1 Cell 1 Temp. (C)`","BMU_1_Cell_1_Temp_C")
val df= df1.withColumn("BMU 1 Cell 1 Temp. (C)",col("BMU 1 Cell 1 Temp. (C)").cast("Double")).withColumnRenamed("BMU 1 Cell 1 Temp. (C)","BMU_1_Cell_1_Temp_C").replaceAll("\\.","_"))
出现以下错误:
org.apache.spark.sql.AnalysisException: cannot resolve '`BMU 1 PCB Temp. (C)`'
您能帮我吗?
解决方法
这是我的火花3.0.0。测试。
val df = spark.createDataFrame(Seq(("1","123.456"))).toDF("id","BMU 1 Cell 1 Temp. (C)")
df.withColumnRenamed("BMU 1 Cell 1 Temp. (C)","BMU_1_Cell_1_Temp_C")
.withColumn("BMU_1_Cell_1_Temp_C",$"BMU_1_Cell_1_Temp_C".cast("double")).show
+---+-------------------+
| id|BMU_1_Cell_1_Temp_C|
+---+-------------------+
| 1| 123.456|
+---+-------------------+
这一项奏效。
val df = spark.createDataFrame(Seq(("1","BMU 1 Cell 1 Temp. (C)")
val cols = df.columns.map(c => c.replaceAll("([.] )|[ ]","_").replaceAll("[()]",""))
df.toDF(cols: _*).withColumn("BMU_1_Cell_1_Temp_C",$"BMU_1_Cell_1_Temp_C".cast("double")).show()
+---+-------------------+
| id|BMU_1_Cell_1_Temp_C|
+---+-------------------+
| 1| 123.456|
+---+-------------------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。