Scala Spark不在地图功能的控制台上打印输出

Scala Spark不在地图功能的控制台上打印输出,scala,apache-spark,spark-streaming,Scala,Apache Spark,Spark Streaming,我有一个在集群模式下运行的简单Spark应用程序 val funcGSSNFilterHeader = (x: String) => { println(!x.contains("servedMSISDN") !x.contains("servedMSISDN") } val ssc = new StreamingContext(sc, Seconds(batchIntervalSeconds)) val ggsnFileLines = ssc.fileStream

我有一个在集群模式下运行的简单Spark应用程序

val funcGSSNFilterHeader = (x: String) => {
    println(!x.contains("servedMSISDN")   
    !x.contains("servedMSISDN")
}

val ssc = new StreamingContext(sc, Seconds(batchIntervalSeconds))
val ggsnFileLines = ssc.fileStream[LongWritable, Text, TextInputFormat]("C:\\Users\\Mbazarganigilani\\Documents\\RA\\GGSN\\Files1", filterF, false)
val ggsnArrays = ggsnFileLines
    .map(x => x._2.toString()).filter(x => funcGSSNFilterHeader(x))

ggsnArrays.foreachRDD(s => {println(x.toString()})
我需要打印!x、 在map函数中包含(“servedsisdn”)以进行调试,但这不会在控制台上打印

您的代码包含驱动程序(主/主)和执行器(在群集模式下的节点上运行)

在“映射”中运行的函数在执行器上运行


i、 e.当您处于集群模式时,执行print inside map函数将导致打印到节点控制台(您将看不到)

为了调试程序,您可以:

  • 在“本地”模式下运行代码,“映射功能”中的打印将在“主/主节点”的控制台上打印,因为执行器在同一台机器上运行

  • 将“打印到控制台”替换为“保存到文件/保存到弹性体”等


  • 请注意,除了本地集群模式之外,您的代码中似乎有一个输入错误:

    ggsnArrays.foreachRDD(s => {println(x.toString()})
    
    应该是:

    ggsnArrays.foreachRDD(s => {println(x.toString)})
    
    两种可能性: 您的日志位于工作节点上,因此必须检查工作日志中的这些日志消息。如前所述,您可以在本地模式下运行应用程序以检查计算机上的日志。顺便说一句,使用i.e.SLF4j比使用println更好,但我认为这只是为了学习:)


    在代码段中没有
    ssc.start()
    ssc.awaitTermination()
    。你运行这些命令了吗?否则,foreachRDD将不会在任何时候执行。如果示例正常,请在脚本末尾添加这些行并重试,但请检查工作节点日志:)

    在本地模式下运行对于此类调试非常有用。当您在map函数内部和map函数外部打印其他内容(例如“hello”)时,会发生什么情况?我想在群集模式下打印它们..当您处于“本地模式”时,是否在map函数内部打印?当您处于群集模式时,打印到控制台将在节点中完成,因此,您不会在driverhow的控制台中看到它,然后在群集模式下在驱动程序控制台上打印它们。。。