如何在已应用于 Spark RDD 的函数中打印语句?



我正在将一个函数应用于Spark RDD,如下所示:

data_2 = sqlContext.createDataFrame(pandas_df,data_schema)
data_3 = data_2.rdd.map(lambda x: parallelized_func(x, **args*)).collect()

现在,函数parallelized_func如下所示:

def parallelized_func(a,b,c):
####FUNCTION BODY#####
print("unique identifier for each row in pandas_df")
return {'df1':df1,'df2':df2}

我面临的问题是:当我运行"data_3 = ..."上面的语句在 Databricks 笔记本中,我希望获取我在 parallelized_func 中打印的唯一标识符显示在某个控制台上的某个位置,因为当pandas_df数据帧中的任何行出现问题时,这样可以更轻松地进行调试。

我尝试检查std_out和std_err控制台中运行作业的每个执行器,但总有一大堆其他语句占据了大部分控制台(我假设与正在执行的各种任务相关的所有 Spark 语句(。我有时可以在其他语句的海洋中找到我的打印语句,但这是一种非常低效且无效的调试方式。

有没有更好的方法来打印这样的语句?还是更好的找到它的方法?例如,我可以抑制 Spark 在控制台上不断抛出的所有其他与执行相关的语句吗?

附加在控制台上打印的其他语句的快照。

打印这不是一个非常好的解决方案,因为正如您所说,有大量日志会激发 Spark 的写入(并且打印用于调试它也不好(。

  1. 您可以制作记录器,将您的日志写入其他地方(只有您的日志会在那里写入(,例如 NFS/您可以写入它的任何位置。甚至在执行器本地,然后检查它(

  2. 如果您尝试查找"损坏"的行,可能仅用于除泡,请仅筛选损坏的行并将其收集到驱动程序,然后 ull 可以在笔记本上本地检查行。

最新更新