dataset、dataframe调用map会生成新的rdd,此时就需要指定rdd各个字段的类型,如果不指定就会报异常:No implicits found for parameter evidence$6: Encoder
解决方法1:指定Encoder
var newDf = df.mapPartitions(row => {
row.map(r => {
("name", "value", "rank")
})
})(Encoders.tuple(Encoders.STRING, Encoders.STRING, Encoders.STRING))
.toDF("name", "value", "rank")
解决方法二:隐式转换
import spark.implicits._
var newDf = df.mapPartitions(row => {
row.map(r => {
("name", "value", "rank")
})
})
.toDF("name", "value", "rank")
解决方法三:使用rdd来遍历
var newDf = df.rdd.mapPartitions(row => {
row.map(r => {
("name", "value", "rank")
})
})