【问题标题】:(<type 'exceptions.ValueError'>, ValueError('need more than 1 value to unpack',), <traceback object at 0x7f24dea1a0e0>) NULL NULL NULL(<type 'exceptions.ValueError'>, ValueError('need more than 1 value to unpack',), <traceback object at 0x7f24dea1a0e0>) NULL NULL NULL
【发布时间】:2016-10-18 02:31:36
【问题描述】:

我在 MapR 中有这样的 HIVE 表。

数据在后端用逗号分隔。我正在尝试在使用 python 时使用自定义地图减少。这是python代码。

import sys
import datetime
try:
    for line in sys.stdin:
        line = line.strip()
        userid, movieid, rating, unixtime = line.split(',')
        weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
        print ','.join([userid, movieid, rating, unixtime, str(weekday)])
except:
    print sys.exc_info()

我添加了使用add File 的python 脚本,这样提交查询

select TRANSFORM (userid,movieid,rating,unixtime) using 'python mod.py' as (userid,movieid,rating,weekday) from u_data;

我到这里的错误是

(<type 'exceptions.ValueError'>, ValueError('need more than 1 value to unpack',), <traceback object at 0x7f24dea1a0e0>) NULL    NULL  NULL

为什么会出现这个错误?

【问题讨论】:

  • 您应该删除 try/except 并打印完整的异常(和回溯)。
  • 我试过了,这里是堆栈跟踪Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script@RushyPanchal
  • 我猜你在输入的某处得到了一个空行(也许在最后,如果在最后一行数据之后有一个额外的换行符)。将if not line: continue 添加到您的循环中(就在strip 之后)可以让您跳过空白行。

标签: python hive mapr


【解决方案1】:

您的代码中唯一可能给您该错误的行是这一行:

userid, movieid, rating, unixtime = line.split(',')

所以它抱怨没有足够的值来解包,这意味着该行中没有任何逗号。在处理之前尝试打印该行;这样您就可以很容易地知道您正在获取哪些数据以及您需要如何处理这些数据。

【讨论】:

  • 这里是日志部分,Stage-Stage-1: Map: 1 Cumulative CPU: 1.01 sec MAPRFS Read: 0 MAPRFS Write: 0 SUCCESS Total MapReduce CPU Time Spent: 1 seconds 10 msec OK 1 101 8 1369721454 (&lt;type 'exceptions.ValueError'&gt;, ValueError('need more than 1 value to unpack',), &lt;traceback object at 0x7f87a6881050&gt;) NULL NULL NULL Time taken: 22.7 seconds, Fetched: 2 row(s)
  • 所以,是吗?至少在那一行中没有逗号。显然你没有得到你所期望的。所以弄清楚你得到了什么并编写代码来处理它,而不是你现在拥有的。
  • 一行可以显示4列,这里是链接link@kindall
  • 仍然没有逗号。
  • 因为它将行显示为制表符分隔,所以我用\t 分割了行,这里是python code,这里是query 执行。那么,我在哪里出错了。
猜你喜欢
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2018-06-28
相关资源
最近更新 更多