地图功能无法与Dataframe(toDF)一起正常使用

时间:2018-08-14 06:45:58

标签: scala apache-spark dataframe dataset

我正在使用下面的代码作为数据集(toDS)运行,但是工作正常,但是当我将其转换为数据框(toDF)时,它无法与数据框一起使用。

数据集代码:

val primitiveDS = Seq(1, 2, 3).toDS()    
primitiveDS.map(_ + 1).collect() 
// **Output** : Array(2, 3, 4)

数据框代码:

val primitiveDF = Seq(1, 2, 3).toDF()
primitiveDF.map(_ + 1).collect()

错误

scala> primitiveDF.map(_ + 1).collect()
<console>:26: error: type mismatch;
 found   : Int(1)
 required: String
       primitiveDF.map(_ + 1).collect()
                       ^

1 个答案:

答案 0 :(得分:0)

如果您在DataFrame上进行映射,则您的元素将为Row类型(一种无类型的集合),您不能仅将1添加到行中,而是必须首先使用存取器方法,例如.getInt

primitiveDF.map((r: Row) => r.getInt(0) + 1).collect()

或更短:

primitiveDF.map(_.getInt(0) + 1).collect()

或具有模式匹配:

primitiveDF.map{case Row(i:Int) => i+1}.collect()