spark 报错收集

Spark SQL开发中常见错误及解决方案
这篇博客主要记录了作者在进行Spark SQL开发时遇到的一些错误,包括:1) 将RDD转换为DataFrame时的类型错误,解决方案是确保所有数据类型一致;2) 存储RDD到Hive表的Map类型要求,需要将dict数据转换为字符串通用格式;3) DataFrame注册为临时表后找不到表的问题,原因是HiveContext的使用不一致,需确保注册表和使用表的上下文相同;4) RDD为空时转换为DataFrame导致的错误,通过指定数据类型可避免这个问题。

最近做spark sql开发碰到了许多问题,下面对报错信息做下记录


1,  StructType can not accept object in type <type 'int'>

将RDD创建成DataFrame的时候,报上述错误,修正方式如下:


将RDD中的行转换成Row类型就可以了


2,RDD转换成DataFrame的时候,报错:TypeError  Integer type cannot accept  object in type <type 'str'>

数据是double类型,并且已经指定double类型




因为RDD中的dict元素的数据类型可以不同,但是在Hive表中的map类型必须相同,当要将RDD数据以Map的格式存储到Hive表中的时候,dict格式需要统一

改成string通用格式即可


3,registerTempTable table not found

将dataframe注册成表后,再次使用该表的时候,系统容易报出table not found 错误


错误原因如下:

 Sc=sparkContext(appName=”a”)

sqlContext=HiveContext(sc)

 sqlContext.sql(“usegfrobdb2”)

 hc=HiveContext(sc)

后面的dataframe是由sqlcontext创建的,当将dataframe注册成表后,sqlContext将无法再次使用该表,只有hc可以使用,应该是注册表时的当前HiveContext是hc,而创建dataframe的时候是sqlContext。将最后一句代码注释掉即可解决问题


4,RDD is empty

RDD转换成DataFrame 有多种方式,当不指定数据类型的时候,如果RDD为空,spark会报错,因为推测数据类型需要访问部分抽样数据

解决办法:转换的时候指定数据类型即可,使用StructType方式



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值