Gri*_*ing 5 python logging pickle apache-spark pyspark
我正在尝试在 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 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()
Run Code Online (Sandbox Code Playgroud)
我知道,这根本没有意义,但它确实重现了我的错误。
Could not pickle thread lock
Run Code Online (Sandbox Code Playgroud)
或类似的东西。
现在我发现,它与日志记录对象以及 extract_udf() 中 self 方法的调用有关。当我删除日志记录时,它会起作用,当我使用非对象函数而不是 self.test() 时,它也会起作用。
您对如何解决此问题有任何想法,或者可以解释为什么会发生这种情况吗?
我不知道为什么链接消失了,但我想我会在这里尝试这篇文章: How to process RDDs using a Python class?
尽管我的问题看起来有所不同,但只要我不涉及日志记录,它就会起作用。
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |