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()