Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在分析的pyspark udf打印行_Python_Python 3.x_Pyspark_User Defined Functions_Static Variables - Fatal编程技术网

Python 正在分析的pyspark 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

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.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(我的意思是只在我的计算机上执行,没有发行版)?