`
lookqlp
  • 浏览: 342149 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hive SQL调用python脚本遇到的几个问题

    博客分类:
  • hive
阅读更多
sql调用python获取数据字段个数太多
源码:
    for line in sys.stdin:
       (tid, dp_id, customerno,...此处省略多个字段,共n个字段) = line.strip().split()

异常:

    图1

原因:

    根据测试,split分割数据以后获取n+m个数值,与预期的n个数值不对应,split默认以空格分割数据,而hive录入数据默认以制表符“\t”分割。

解决:

     for line in sys.stdin:

       (tid, dp_id, customerno,...此处省略多个字段,共n个字段) = line.strip().split(“\t”)
python print输出数据类型格式不准确
源码:
     print "%s\t%s\t%s\t%s\t%d\t%f\t%s\t%g..." %  (tid, dp_id, customerno, created, endtime, status, trade_from, type, pay_time, total_fee, ...)

异常:
    图2

原因:
    如上源码和问题1中的源码,括号内传入的数据都为string型。“%s”,“%f”,“%d”,“%g”是根据hive表中字段数据类型来定的。此处print输出数据至sql因为数据类型不匹配出现如上异常。

解决:
   根据括号内的常数类型使用相应的输出类型,输出类型不是根据hive表字段数据类型来定,如上,括号内都是string类型,即所有输出使用“%s”。

sys.stdin输入python脚本中数据准确split后,字段个数不准确,问题类似于问题1
源码:
    如问题1中源码。

异常:
    图3

原因:
    正常情况下,split后有41个字段数据,然而split后少于41个字段,经过测试,sys.stdin输入数据中,有字段有空值或者字段内容中含有\n \r \01等特殊字符,导致切割数据不准确。

解决:
    构建表时加入:alter table_name set serdeproperties('serialization.null.format'='NULL');
    sqoop脚本中加入:--hive-drop-import-delims
  • 大小: 9 KB
  • 大小: 7.8 KB
  • 大小: 9.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics