没有类型编码器[行]的隐式参数

No implicit arguments of type Encoder[Row]

我一直在努力学习如何在 Scala 中使用地图功能。但是,我不断收到错误 No implicit arguments of type Encoder[Row]。如何在不必创建定义 json 建模方式的 class 的情况下修复此错误?

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()

您可以使用 RowEncoderRow 定义一个自定义 Encoder 如果您有它的架构,并且由于 r 没有更改,您可以安全地使用来自source 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)