我一直在努力学习如何在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()
如果您有RowEncoder
的架构,您可以为Row
定义一个自定义Encoder
,并且由于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)