【问题标题】:PySpark print to consolePySpark 打印到控制台
【发布时间】:2016-09-21 07:03:33
【问题描述】:

当像这样在 dataproc 服务器上运行 PySpark 作业时

gcloud --project <project_name> dataproc jobs submit pyspark --cluster <cluster_name> <python_script>

我的打印语句没有显示在我的终端中。

在云上运行作业时,有什么方法可以在 PySpark 中将数据输出到终端上?

编辑:我想从我的转换中打印/记录信息。例如:

def print_funct(l):
    print(l)
    return l

rddData.map(lambda l: print_funct(l)).collect()

应该打印 RDD rddData 中的每一行数据。

进行了一些挖掘,我发现了这个answer for logging,但是,测试它为我提供了this question 的结果,其回答表明在转换中无法进行日志记录

【问题讨论】:

  • 当您说打印语句时,您的意思是从python驱动程序内部吗?还是内部火花变换?通过在主 VM 上运行 spark-submit 看到的驱动程序的所有输出都将由 gcloud 打印。另一方面,转换的输出在不同的 VM 上运行,不会被打印。如果可以,请添加示例。
  • @tix:我假设我的打印语句在 spark 转换中。我猜打印输出被发送到每个虚拟机,而不是主控,因此不是给我?

标签: python-2.7 pyspark google-cloud-dataproc


【解决方案1】:

在转换中打印或记录最终会出现在 Spark 执行器日志中,可以通过应用程序的 AppMaster 或 HistoryServer 通过 YARN ResourceManager Web UI 访问。

您也可以收集与输出一起打印的信息(例如,在字典或元组中)。您也可以将其存储在一个累加器中,然后从驱动程序中打印出来。

如果您正在进行大量打印语句调试,您可能会发现通过 SSH 连接到您的主节点并使用 pyspark REPL 或 IPython 来试验您的代码会更快。这也将允许您使用 --master 本地标志,这将使您的打印语句出现在标准输出中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2012-02-07
    • 2015-05-04
    • 2016-11-19
    • 2018-07-14
    • 2013-03-29
    • 2020-09-29
    相关资源
    最近更新 更多