没有 Encoder[Row] 类型的隐式参数
Posted
技术标签:
【中文标题】没有 Encoder[Row] 类型的隐式参数【英文标题】:No implicit arguments of type Encoder[Row] 【发布时间】:2021-10-28 06:05:57 【问题描述】:我一直在尝试学习如何在 scala 中使用 map 函数。但是,我不断收到错误No implicit arguments of type Encoder[Row]
。如何在不必创建定义 json 建模方式的类的情况下修复此错误?
val spark = SparkSession.builder
.appName("SparkSQL")
.master("local[*]")
.getOrCreate()
val df = spark.read.json("src/main/scala/data.json")
val df2 = df.map(r => r)
df2.printSchema()
【问题讨论】:
【参考方案1】:您可以为Row
定义自定义Encoder
和RowEncoder
,如果您有其架构并且由于r
没有更改,您可以安全地使用源DataFrame
df
中的架构而无需在编译时知道架构。
您也可以使用来源DataFrame
的编码器,同样应该是安全的。
import org.apache.spark.sql.catalyst.encoders.RowEncoder
val df2 = df.map(r => r)(RowEncoder(df.schema))
val df3 = df.map(r => r)(df.encoder)
【讨论】:
以上是关于没有 Encoder[Row] 类型的隐式参数的主要内容,如果未能解决你的问题,请参考以下文章
Scala 类型参数化,Shapeless - 找不到参数 Generic 的隐式值