为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

尝试将数据帧行映射到更新行时出现编码器错误当我试图在我的代码中做同样的事情,如下所述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提供的优化不会被应用。


查看完整回答
反对 回复 2019-08-12
  • 2 回答
  • 0 关注
  • 504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信