2016-12-26 5 views
1

私はpyspark 2.0を使用しています。私は日付型として前日の値を取得していますが、私は避けて文字列に変換しようとしていたときにPicklingErrorを取得する:<type 'function'>をpickleできません:属性ルックアップ__builtin __。関数がUDFを呼び出すときにpysparkで失敗しました

spark.sql("select date_add(Getday(),-1)as stringtime").show() 

を呼び出していたときに私はこれまで怒鳴るコードを

from pyspark.sql.types import* 
from datetime import datetime 
from pyspark.sql.functions import udf 


def getTime(): 
    timevalue=datetime.now() 
    return timevalue 

spark.udf.register('Getday', getTime,TimestampType()) 

def datetostring_conv(datevalue): 
    stringvalue=datevalue.strftime('%Y-%m-%d') 
    print stringvalue 
    intstring=stringvalue[0:4]+stringvalue[5:7]+stringvalue[8:10] 
    return intstring 

spark.udf.register('IntString',lambda(x):datetostring_conv,StringType()) 

を酸洗エラーを取得しています' - '

spark.udf.register('IntString', lambda x: datetostring_conv(x), StringType()) 

またはパス:機能ジョブIは、酸洗エラー私は

答えて

2

いずれかの関数を呼び出す前に、このエラーに

感謝を解決することができる方法

spark.sql("select IntString(date_add(GetDay(),1))as stringvalue").show() 

を取得していますがIntStringされています機能:

spark.udf.register('IntString', datetostring_conv, StringType()) 

あなたが使用します。したがって、例外を

type((lambda x: datetostring_conv)(datetime.now())) 
function 

lambda x: datetostring_conv 

あなたは関数を返す単項関数を渡します。もちろん

UDFのための必要はありません。

spark.sql("SELECT date_format(date_add(current_date(), -1), 'YYYYMMdd')") 

ノート

あなたはラムダ式の引数リストと括弧を使用しないでください。これは:

  • 単一の引数では何の効果もありません。複数の引数で
関連する問題