Pyspark 如何结合df.createOrReplaceTempView()将spark.sql应用于工作节点

Pyspark 如何结合df.createOrReplaceTempView()将spark.sql应用于工作节点,pyspark,apache-spark-sql,pyspark-sql,Pyspark,Apache Spark Sql,Pyspark Sql,当我执行以下代码时 df6.createOrReplaceTempView("table2") def func(partition_id, r): flmgd=str(r.FNAME)+str(r.LNAME)+str(r.MNAME)+str(r.GENDER)+str(r.DOB) query=""" SELECT PID, FNAMELNAMEMNAMEGENDERDOB FROM table2 WHERE FNAMELNAMEMNAMEGEND

当我执行以下代码时

df6.createOrReplaceTempView("table2")
def func(partition_id, r):
    flmgd=str(r.FNAME)+str(r.LNAME)+str(r.MNAME)+str(r.GENDER)+str(r.DOB)
    query=""" 
    SELECT PID, FNAMELNAMEMNAMEGENDERDOB
    FROM table2
    WHERE FNAMELNAMEMNAMEGENDERDOB=\"%s\"
    """%flmgd
    df=spark.sql(query)
    list1=df.select('FNAMELNAMEMNAMEGENDERDOB').rdd.collect()
    if list1 ==[]:
        ID=None
    else:
        ID=df.select(['PID']).collect()
    yield Row(**r.asDict(),PIDF=ID)
df3=df2.rdd.mapPartitionsWithIndex(func).toDF()
然后我收到了警告信息

PicklingError:无法序列化对象:异常:似乎您正试图从广播变量、操作或转换引用SparkContext。SparkContext只能在驱动程序上使用,不能在工作程序上运行的代码中使用。有关更多信息,请参阅SPARK-5063


看起来主要问题是SparkContext无法在工作节点中运行。我在谷歌上搜索,但没有找到解决办法。你介意帮我回避这个问题吗?多谢各位

你想做什么?这段代码不起作用,错误表明我理解错误的含义。我试图找出一种方法,为
df2
中的每个obs提取
df6
中最相似的obs。最近,上面的代码是选择等价的obs。但是如果它能工作,那么我会想办法找到最相似的OB,而不仅仅是等效的OB。如果没有
mapPartitionsWithIndex
,你不能这样做吗?你是说使用
map
。如果是的话,那么我认为我们仍将面临同样的错误。如果有其他方法,请提供更多细节。谢谢。我还考虑过使用
join(df6,levenshtein…
)。但问题是,levenshtein在识别字母和数字组成的obs中的相似性方面存在弱点。您可以检查str99='99百老汇'str100='100百老汇'str999='999百老汇'。此外,
df6
的文件很大,大约为5gb。