Apache spark 如果列名包含空格,DataFrame能否转换为case类的Dataset?
我有一个SparkApache spark 如果列名包含空格,DataFrame能否转换为case类的Dataset?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个SparkDataFrame,其中列名包含空格。是否可以将这些行转换为案例类 例如,如果我这样做: val data = Seq(1, 2, 3).toDF("a number") case class Record(`a number`: Int) data.as[Record] 我得到一个例外: org.apache.spark.sql.AnalysisException: cannot resolve '`a$u0020number`' given input columns:
DataFrame
,其中列名包含空格。是否可以将这些行转换为案例类
例如,如果我这样做:
val data = Seq(1, 2, 3).toDF("a number")
case class Record(`a number`: Int)
data.as[Record]
我得到一个例外:
org.apache.spark.sql.AnalysisException: cannot resolve '`a$u0020number`' given input columns: [a number];
at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:77)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:74)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:310)
...
有没有办法做到这一点
(当然,我可以通过在转换为case类之前重命名列来解决这个问题。我希望case类与输入架构完全匹配。)您能尝试一下这个解决方案吗,这在不更改列名的情况下对我有效
import sqlContext.implicits._
case class Record(`a number`: Int)
val data = Seq(1, 2, 3)
val recDF = data.map(x => Record(x)).toDF()
recDF.collect().foreach(println)
[1]
[2]
[3]
我正在使用Spark 1.6.0。代码中唯一不适合我的部分是设置测试数据的部分。我必须使用元组序列而不是整数序列:
case class Record(`a number`:Int)
val data = Seq(Tuple1(1),Tuple1(2),Tuple1(3)).toDF("a number")
data.as[Record]
// returns org.apache.spark.sql.Data[Record] = [a$u0020number: int]
如果您需要一个数据帧
而不是数据集
,则始终可以使用另一个toDF
:
data.as[Record].toDF
谢谢不过,这对我来说并不是真的有效,因为在我的实际情况中,数据是作为
数据帧
加载的,它不是来自序列
。使用Seq.toDF
只是为了方便示例。很抱歉给你带来了困惑。