spark读取elasticsearch数据报scala.collectino.GenTraversableOnce$class错解决办法
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 c l a s s . c l a s s 这 个 类 , 只 有 s c a l a . c o l l e c t i o n . G e n T r a v e r s a b l e O n c e . c l a s s 这 个 类 ( 注 意 两 个 c l a s s 不 一 样 ) 。 而 这 个 s c a l a . c o l l e c t i o n . G e n T r a v e r s a b l e O n c e class.class这个类,只有scala.collection.GenTraversableOnce.class这个类(注意两个class不一样)。而这个scala.collection.GenTraversableOnce class.class这个类,只有scala.collection.GenTraversableOnce.class这个类(注意两个class不一样)。而这个scala.collection.GenTraversableOnceclass.class类,只在scala的2.10版本中有。因此,我们需要下载一个scala的2.10的版本,在jar包中找到scala.collection.GenTraversableOnce c l a s s . c l a s s 这 个 类 , 拼 拷 贝 出 来 , 再 使 用 w i n r a r 打 开 2.11 的 版 本 , 把 s c a l a . c o l l e c t i o n . G e n T r a v e r s a b l e O n c e class.class这个类,拼拷贝出来,再使用winrar打开2.11的版本,把scala.collection.GenTraversableOnce class.class这个类,拼拷贝出来,再使用winrar打开2.11的版本,把scala.collection.GenTraversableOnceclass.class加入到2.11的jar包去。上传集群后,重启集群,再试,一切OK、
结论:
scala.collection.GenTraversableOnce
c
l
a
s
s
.
c
l
a
s
s
这
个
类
在
2.10
版
本
j
a
r
反
编
译
的
源
码
中
,
只
找
到
一
个
类
似
接
口
方
法
的
声
明
,
未
找
到
内
部
类
。
直
接
加
到
到
2.11
版
本
的
s
c
a
l
a
版
本
j
a
r
中
,
系
统
就
正
常
了
,
因
此
怀
疑
这
个
s
c
a
l
a
.
c
o
l
l
e
c
t
i
o
n
.
G
e
n
T
r
a
v
e
r
s
a
b
l
e
O
n
c
e
class.class这个类在2.10版本jar反编译的源码中,只找到一个类似接口方法的声明,未找到内部类。直接加到到2.11版本的scala版本jar中,系统就正常了,因此怀疑这个scala.collection.GenTraversableOnce
class.class这个类在2.10版本jar反编译的源码中,只找到一个类似接口方法的声明,未找到内部类。直接加到到2.11版本的scala版本jar中,系统就正常了,因此怀疑这个scala.collection.GenTraversableOnceclass.class特殊的类,可能只是spark2.1.3版本中哪里有引用,并未使用。因此,加进去后可以正常运行。
有疑问,可加QQ群讨论:258143901