sparksql table not found错误

一般情况下可以先去看看是不是自己的表名写错了,当然我遇到的一种情况是下面这样的:
使用hiveContext读取一张表,并注册为一张临时表(dataFrame.registerTemptable()),
使用sqlContext读取另一张表,并注册为临时表,随后我再使用sqlContext.sql(“两表关联sql语句”),运行报错"table not found",
仔细研究之下突然想到了一个知识点,sqlContext与hiveContext分别注册的临时表生命周期是不同的,即sqlContext注册的表只能使用sqlContext.sql()来操作,hiveContext注册的表只能使用hiveContext.sql()操作,否则就会报错!
那么怎么办呢?有没有解决办法呢?当然是有的,还不止一种!
1:不将其注册为临时表,使用saveAsTable()这个方法,此方法会把表保存在本地目录,哪怕spark作业重启,仍然能读取到。
2:推荐方法,统一使用hiveContext来操作,经过测试我发现hiveContext是可以读取操作mysql表的,因此这里统一使用hiveContext,sqlContext一般多用于本地mysql表的测试,但说实话这个逻辑是不正确的,因此spark在2.0之后就对此做出了修改,不再存在hiveContext,统一为SQlContext。

猜你喜欢

转载自blog.csdn.net/qq_39719415/article/details/96426717
今日推荐