获取酸洗错误:无法腌制<类型'函数'>:调用 UDF 时,属性查找 __builtin__.函数在 pyspark 中失败



我正在使用pyspark 2.0。我正在为波纹管代码腌制错误

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.sql("select date_add(Getday(),-1)as stringtime").show()

我将前一天的价值作为日期类型,但是当我试图将其转换为避免' - '的字符串时。这是intstring函数工作,我正在腌制错误

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

我该如何解决此错误

预先感谢

呼叫函数:

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

或传递功能:

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

使用:

lambda x: datetostring_conv

您传递了返回功能的一单函数:

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

因此例外。

当然不需要UDF:

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

注释

您不应将括号用于lambda表达式的参数列表。这个:

  • 对单个参数没有影响。
  • 有多个参数:

    • 在Python 2中具有特殊的含义(元组参数解箱)。
    • 在Python 3中不支持

我遇到了此错误,因为注册该函数时没有包括参数:

def find_thresh(wav):
    [some code returning int]
convertUDF = udf(lambda z: find_thresh,IntegerType())

应该是:


convertUDF = udf(lambda z: find_thresh(z),IntegerType())

以防万一它有帮助。

相关内容

  • 没有找到相关文章

最新更新