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。