2017-06-07 36 views
0

我有一個Spark DataFrame其中一個列名包含一個空格。是否有可能將這些行轉換爲案例類?如果列名包含空格,DataFrame是否可以轉換爲case類的Dataset?

例如,如果我這樣做:

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類完全匹配的輸入模式。)

回答

0

你可以試試這個方案,這個工作對我而言,無需更改列名稱。

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] 
+0

謝謝。儘管如此,這並不適合我,因爲在我的真實情況下,數據作爲DataFrame加載,而不是來自Seq。使用'Seq.toDF'只是爲了方便示例。對困惑感到抱歉。 –

相關問題