这里的问题是您使用不同的类来创建缓存并将数据插入到其中。即使这两个类的字段匹配,它们的完全限定名称也不同,因此这是两个不同的类。
如果希望能够从SQL查询数据,则应在缓存创建和数据插入期间使用相同的类。
跳过创建缓存解决了该问题的原因是Spark应用程序自己创建了一个缓存,而不是使用现有的缓存。因此,当Spark创建它时,在缓存创建过程中将使用实际对象的类。

这里的问题是您使用不同的类来创建缓存并将数据插入到其中。即使这两个类的字段匹配,它们的完全限定名称也不同,因此这是两个不同的类。
如果希望能够从SQL查询数据,则应在缓存创建和数据插入期间使用相同的类。
跳过创建缓存解决了该问题的原因是Spark应用程序自己创建了一个缓存,而不是使用现有的缓存。因此,当Spark创建它时,在缓存创建过程中将使用实际对象的类。