我正在使用下面的代码作为数据集(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()
^
答案 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()