Getting PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed in pyspark when calling UDF
Getting PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed in pyspark when calling UDF
我正在使用 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
你传递了一个一元函数,其中 returns 一个函数:
type((lambda x: datetostring_conv)(datetime.now()))
function
因此例外。
当然不需要UDF:
spark.sql("SELECT date_format(date_add(current_date(), -1), 'YYYYMMdd')")
备注:
您不应在 lambda 表达式的参数列表中使用括号。这个:
- 对单个参数无效。
有多个参数:
- 在Python2(元组参数解包)中有特殊含义。
- Is not supported in 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())
以防万一它有帮助。
我正在使用 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
你传递了一个一元函数,其中 returns 一个函数:
type((lambda x: datetostring_conv)(datetime.now()))
function
因此例外。
当然不需要UDF:
spark.sql("SELECT date_format(date_add(current_date(), -1), 'YYYYMMdd')")
备注:
您不应在 lambda 表达式的参数列表中使用括号。这个:
- 对单个参数无效。
有多个参数:
- 在Python2(元组参数解包)中有特殊含义。
- Is not supported in 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())
以防万一它有帮助。