尝试将数据帧行映射到更新行时出现编码器错误当我试图在我的代码中做同样的事情,如下所述dataframe.map(row => {
val row1 = row.getAs[String](1)
val make = if (row1.toLowerCase == "tesla") "S" else row1 Row(row(0),make,row(2))})我从这里采取了上述参考: Scala:如何使用scala替换Dataframs中的值 但是我收到编码器错误无法找到存储在数据集中的类型的编码器。导入spark.im plicits支持原始类型(Int,S tring等)和产品类型(case类)._将在以后的版本中添加对序列化其他类型的支持。注意:我正在使用spark 2.0!
2 回答
万千封印
TA贡献1891条经验 获得超3个赞
对于预先知道数据帧模式的情况,@ zero323给出的答案是解决方案
但是对于具有动态模式/或将多个数据帧传递给泛型函数的场景:以下代码对我们起作用,同时从1.5.0迁移到2.2.0
import org.apache.spark.sql.Rowval df = Seq( (2012, "Tesla", "S"), (1997, "Ford", "E350"), (2015, "Chevy", "Volt") ).toDF("year", "make", "model")val data = df.rdd.map(row => { val row1 = row.getAs[String](1) val make = if (row1.toLowerCase == "tesla") "S" else row1 Row(row(0),make,row(2))})
此代码在两个版本的spark上执行。
缺点:数据帧/数据集api上的spark提供的优化不会被应用。
添加回答
举报
0/150
提交
取消