Scala 映射函数在使用数据帧(toDF)时工作不正常

Scala 映射函数在使用数据帧(toDF)时工作不正常,scala,apache-spark,dataframe,dataset,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() 数据帧代码: val

我在下面的代码中运行数据集(
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()
数据帧代码:

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()
                       ^
scala>primitiveDF.map(+1.collect())
:26:错误:类型不匹配;
发现:Int(1)
必需:字符串
primitiveDF.map(+1).collect()
^

如果映射到数据帧,则元素的类型将为
(一种非类型集合),您不能只向行添加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()