spark读取elasticsearch数据报scala.collectino.GenTraversableOnce$class错解决办法
土哥呀 2018-09-18 02:36:26 spark读取elasticsearch数据报scala.collection.GenTraversableOnce$class错解决办法
spark2.3,创建temporary view表关联elasticsearch索引,通过temporary view读取elasticsearch数据时,报如下错误:
java.lang.NoClassDefFoundError:
scala/collection/GenTraversableOnce$class
原因是spark2.0以后,只支持scala的2.11以后的版本,但是这个版本里又没有scala.collection.GenTraversableOnce$class.class这个类,只有scala.collection.GenTraversableOnce.class这个类(注意两个class不一样)。而这个scala.collection.GenTraversableOnce$class.class类,只在scala的2.10版本中有。因此,我们需要下载一个scala的2.10的版本,在jar包中找到scala.collection.GenTraversableOnce$class.class这个类,拼拷贝出来,再使用winrar打开2.11的版本,把scala.collection.GenTraversableOnce$class.class加入到2.11的jar包去。上传集群后,重启集群,再试,一切OK、
结论:
scala.collection.GenTraversableOnce$class.class这个类在2.10版本jar反编译的源码中,只找到一个类似接口方法的声明,未找到内部类。直接加到到2.11版本的scala版本jar中,系统就正常了,因此怀疑这个scala.collection.GenTraversableOnce$class.class特殊的类,可能只是spark2.1.3版本中哪里有引用,并未使用。因此,加进去后可以正常运行。
有疑问,可加QQ讨论:455741807