【问题标题】:Getting PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed in pyspark when calling UDF获取 PicklingError: Can't pickle <type 'function'>: 调用 UDF 时 pyspark 中的属性查找 __builtin__.function 失败
【发布时间】:2017-05-11 01:58:45
【问题描述】:

我正在使用 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()

我该如何解决这个错误

提前致谢

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql user-defined-functions


    【解决方案1】:

    要么调用函数:

    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 表达式的参数列表中使用括号。这个:

    【讨论】:

      【解决方案2】:

      我收到此错误是因为我在注册函数时没有包含参数:

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

      应该是什么时候:

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

      以防万一。

      【讨论】:

        猜你喜欢
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2020-08-18
        • 2016-03-15
        • 2023-01-11
        • 2018-11-19
        相关资源
        最近更新 更多