【问题标题】:How do I print statements inside a function that has been applied to a Spark RDD?如何在已应用于 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

【问题讨论】:

    标签: apache-spark debugging pyspark apache-spark-sql databricks


    【解决方案1】:

    打印它不是一个很好的解决方案,因为正如你所说,有大量的日志是 spark 写入的(并且打印用于调试也不好)。

      1234563 )
    1. 如果您尝试查找“损坏”的行,可能仅用于调试,仅过滤损坏的行并将其收集到驱动程序,然后您可以在笔记本上本地检查行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 2021-07-01
      • 1970-01-01
      • 2016-08-14
      相关资源
      最近更新 更多