如何在已应用于 Spark RDD 的函数中打印语句?
Posted
技术标签:
【中文标题】如何在已应用于 Spark RDD 的函数中打印语句?【英文标题】:How do I print statements inside a function that has been applied to a Spark RDD? 【发布时间】:2020-05-30 05:40:03 【问题描述】:我正在向 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
我面临的问题是:当我在 Databricks 笔记本中运行上面的“data_3 = ...”语句时,我希望获取我在 parallelized_func 中打印的唯一标识符以显示在某处,在某些控制台上,因为当 pandas_df 数据框中的任何行出现问题时,调试起来会更容易。
我尝试检查运行作业的每个执行程序的 std_out 和 std_err 控制台,但总是有一大堆其他语句占据了大部分控制台(我假设所有与正在执行的各种任务相关的 Spark 语句)。有时我可以在浩瀚的其他语句中找到我的打印语句,但这是一种非常低效且低效的调试方式。
有没有更好的方法可以打印这样的声明?或者找到更好的方法?例如,我可以抑制 Spark 在控制台上不断抛出的所有其他与执行相关的语句吗?
附加在控制台上打印的其他语句的snapshot。
【问题讨论】:
【参考方案1】:打印它不是一个很好的解决方案,因为正如你所说,有大量的日志是 spark 写入的(并且打印用于调试也不好)。
-
1234563 )
如果您尝试查找“损坏”的行,可能仅用于调试,仅过滤损坏的行并将其收集到驱动程序,然后您可以在笔记本上本地检查行。
【讨论】:
以上是关于如何在已应用于 Spark RDD 的函数中打印语句?的主要内容,如果未能解决你的问题,请参考以下文章
Spark Streaming:如何定期刷新缓存的 RDD?