spark2 dataframe map报错

本文介绍在Spark2中使用DataFrame的map操作时遇到的错误及其两种解决方案。第一种是在使用map操作前导入spark.implicits._;第二种是自定义encoder来处理特定类型的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在spark2中使用dataframe的map操作时候报错:

Error:(34, 20) Unable to find encoder for type stored in a Dataset.  Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._  Support for serializing other types will be added in future releases.
        mRecord.map(teenager => teenager(0)+"lina").show(false);


这里有两种解决办法:

第一种:

        val spark = SparkSession.builder
        .master("local[4]")
        .appName("test1")
        .getOrCreate();
	import spark.implicits._
在要使用map的语句前面加上:

import spark.implicits._


第二种:

// No pre-defined encoders for Dataset[Map[K,V]], define explicitly
implicit val mapEncoder = org.apache.spark.sql.Encoders.kryo[Map[String, Any]]
// Primitive types and case classes can be also defined as
// implicit val stringIntMapEncoder: Encoder[Map[String, Any]] = ExpressionEncoder()

// row.getValuesMap[T] retrieves multiple columns at once into a Map[String, T]
teenagersDF.map(teenager => teenager.getValuesMap[Any](List("name", "age"))).collect()
// Array(Map("name" -> "Justin", "age" -> 19))

参照官方做法,自己注册一个encoder。一般是第一种方法中没有你要用的encoder的时候才自己注册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值