Python 正在分析的pyspark udf打印行
pyspark udf函数中有一个问题,我想打印生成该问题的行的编号 我尝试使用Python中的“static variable”来计算行数,这样当用新行调用udf时,计数器就会递增。但是,它不起作用:Python 正在分析的pyspark udf打印行,python,python-3.x,pyspark,user-defined-functions,static-variables,Python,Python 3.x,Pyspark,User Defined Functions,Static Variables,pyspark udf函数中有一个问题,我想打印生成该问题的行的编号 我尝试使用Python中的“static variable”来计算行数,这样当用新行调用udf时,计数器就会递增。但是,它不起作用: import pyspark.sql.functions as F def myF(input): myF.lineNumber += 1 if (somethingBad): print(myF.lineNumber) return res myF.l
import pyspark.sql.functions as F
def myF(input):
myF.lineNumber += 1
if (somethingBad):
print(myF.lineNumber)
return res
myF.lineNumber = 0
myF_udf = F.udf(myF, StringType())
我如何计算udf被调用的次数,以便在pyspark中找到产生问题的行数?udf是在Worker中执行的,因此udf中的打印语句不会显示在输出中(来自驱动程序)。处理UDF问题的最佳方法是将UDF的返回类型更改为结构或列表,并将错误信息与返回的输出一起传递。在下面的代码中,我只是将错误信息添加到最初返回的字符串res中
import pyspark.sql.functions as F
def myF(input):
myF.lineNumber += 1
if (somethingBad):
res += 'Error in line {}".format(myF.lineNumber)
return res
myF.lineNumber = 0
myF_udf = F.udf(myF, StringType())
什么是否决票?每行应用一个UDF。。。您无法计算UDF中的行数,因为UDF是重复的并应用于每一行…如果您仔细阅读问题,您会发现我不是在直接计算行数,而是在尝试使用计数器计算函数的调用次数。我的坏。。。但无论如何,这仍然是不可能的,唯一的原因是函数的dup是在工作者级别执行的,并且只有结果会返回到驱动程序级别。因此,您无法访问
lineNumber
的最终值。即使我在本地执行pyspark(我的意思是只在我的计算机上执行,没有发行版)?