如何在Scala案例类中转义减号

Vic*_*cky 2 scala apache-spark

我有一个镶木地板文件,-它的列名中有减号(即student-name)。我正在尝试将案例类用作编码器,同时读取如下所示的镶木地板文件:

case class Student (student-name : String, student_age : String)

object abcd {

   val student_details = spark.read.parquet('/path/to/parquet-file').as[Student]

 }
Run Code Online (Sandbox Code Playgroud)

但问题是-case 类中的减号抛出错误。我试过用反引号 (`) 封闭它没有帮助。请在下面找到错误列表。

没有反引号的错误

 case class Student (student-name : String, student_age : String)

:expected
Wrong top statement declaration
Run Code Online (Sandbox Code Playgroud)

反引号错误

case class Student (`student-name` : String, student_age : String)

cannot resolve '`student$minusname`' given input columns:[student-name,student_age]
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

谢谢

Ped*_*uís 5

你不能用 Spark 读取这些类型的字段,当试图通过 Spark 读取时,每个在 Java 中无效的名称都会出错。这是因为 Spark 用 Ja​​va 生成代码,并且它们在代码生成步骤中使用相同的名称。

我有一个开放的 PR,它改进了 Spark 在字段名称以数字开头的情况下给出的错误消息:https : //github.com/apache/spark/pull/26319

解决方法是按照@Alex Ott 所说的那样做,您需要先将列重命名为有效名称,然后正常读取。