Python Can';t Pickle线程锁对象
我正在尝试用python运行以下代码:Python Can';t Pickle线程锁对象,python,apache-spark,logging,pyspark,pickle,Python,Apache Spark,Logging,Pyspark,Pickle,我正在尝试用python运行以下代码: from pyspark.sql.types import StringType from pyspark.sql.functions import udf from pyspark import SparkContext from pyspark import SparkConf import pyspark.sql.functions as pf import logging import sys from pyspark.sql import
from pyspark.sql.types import StringType
from pyspark.sql.functions import udf
from pyspark import SparkContext
from pyspark import SparkConf
import pyspark.sql.functions as pf
import logging
import sys
from pyspark.sql import SQLContext
log = logging.getLogger('EXT')
class Test:
def __init__(self):
pass
def ext_udf(self, f):
return udf(lambda f: self.test(1))
def test(self,arg):
return(arg)
def create_df(self):
log.info("Test")
log.debug("Test")
conf = SparkConf().setAppName('Extr')
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
df = SQLContext.createDataFrame(sqlContext,[{'name': 'Alice', 'age': 1}])
df.withColumn('meta-data', self.ext_udf(1)(pf.col("name"))).show()
if __name__ == "__main__":
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
t=Test()
t.create_df()
我知道,这毫无意义,但它确实重现了我的错误
Could not pickle thread lock
或者类似的
现在我发现,这与日志对象和extraction_udf()中的self方法调用有关。当我删除日志记录时,它会工作;当我使用非对象函数而不是self.test()时,它也会工作
你对如何解决这个问题有什么想法,或者可以解释为什么会发生这种情况
我不知道为什么链接消失了,但我想我会在这里试试这个帖子:
虽然我的问题看起来不一样,但只要不涉及日志记录,它就会起作用