2016-12-02 4 views
0

私はいくつかの日付形式を変換し、ビジネスロジックに基づいてブール条件に操作するという要件があります。ハイブ:Python UDFは "演算子を閉じる際にハイブランタイムエラー"を返します

しかし、私はHiveからpythonスクリプトを呼び出す際に問題に失敗しています。以下は、私がサンプル1列に日付形式を変換するために書かれているスクリプトです:

import sys 

def getYearMonthFromStringDate(dt): 
    year=0 
    month=0 
    try: 
     ss=dt.split('-') 
     year=ss[0] 
     month=ss[1] 
    except ValueError: 
     print "Error parsing date string %s" %dt 
    return int(year)*100+int(month) 

for line in sys.stdin: 
    tempArr=line.split('\t') 
    accountgl0s=tempArr[0] 
    agl0 = getYearMonthFromStringDate(accountgl0s) 
    output_list = [accountgl0s, ag10] 
    print '\t'.join(output_list) 

私は、次のコマンドを使用して、分散キャッシュ内のファイルを追加しました:

add file /folder/date.py 

さて、私はこれのPythonを呼び出しています次のように変換を用いた私のハイブテーブルのCOL accountgl0sの機能:

Input column accountgl0s = '2016-10-01' 

select transform(accountgl0) using 'python date.py' as (accountgl0s,agl0) from sample; 

私の予想出力は2016-10-01 201610する必要があります。しかし、私は以下のエラーを受け取ります:

Error: java.lang.RuntimeException: Hive Runtime Error while closing operators 
     at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.close(ExecMapper.java:217) 
     at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61) 
     at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453) 
     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) 
     at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:422) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671) 
     at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script. 
     at org.apache.hadoop.hive.ql.exec.ScriptOperator.close(ScriptOperator.java:557) 
     at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:610) 
     at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:610) 
     at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:610) 
     at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.close(ExecMapper.java:199) 
     ... 8 more 


FAILED: Execution Error, return code 20003 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. An error occurred when trying to close the Operator running your custom script. 
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1 HDFS Read: 0 HDFS Write: 0 FAIL 
Total MapReduce CPU Time Spent: 0 msec 
+0

を、ジョブの開始などの出力メッセージ内のURLがある= job_1480642810315_083110、トラッキングURL =のhttp:// hadoop-test15.int.xxxxxx.com:8088/proxy/application_148012122315_081130/、このurlにアクセスして、pythonエラーメッセージに関する情報を見つけることができます。 –

+0

文字列を分割するカスタムPythonスクリプトを書いているのはなぜですか? – gobrewers14

答えて

0

実際に私はpythonスクリプトに多くのbiz論理を含める必要があります。しかし、テスト目的のために、私はちょうど日付文字列を変換するために小さなコードをテストしています。

このスクリプトに問題がありますか?

0

あなたは計算回数たい時に浮くためにあなたの変数を入力に変更する必要があります。これらのエラーメッセージの上

f_accountgl0s = float(accountgl0s) 
関連する問題