尝试将数据帧行映射到更新行时出现编码器错误

尝试将数据帧行映射到更新行时出现编码器错误

当我试图在我的代码中做同样的事情,如下所述

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!


慕姐8265434
浏览 505回答 2
2回答

万千封印

对于预先知道数据帧模式的情况,@ zero323给出的答案是解决方案但是对于具有动态模式/或将多个数据帧传递给泛型函数的场景:以下代码对我们起作用,同时从1.5.0迁移到2.2.0import 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提供的优化不会被应用。
打开App,查看更多内容
随时随地看视频慕课网APP