2017-05-26 55 views
1

我的方法: -为什么我的自定义函数的调用方法中的println语句不会出现在日志中?

private static Function<ConsumerRecord<String, String>, StreamDataWrapper> createFunction(){ 
    System.out.println("***** inside create function ******"); 
    ObjectMapper mapper = new ObjectMapper(); 
    Function<ConsumerRecord<String, String>, StreamDataWrapper> function = new Function<ConsumerRecord<String, String>, StreamDataWrapper>(){ 

     public StreamDataWrapper call(ConsumerRecord<String, String> c) throws JsonParseException, JsonMappingException, IOException{ 
      System.out.println("**** inside call of Function *******"); 
      System.out.println("**** Consumer record "+c); 
      StreamData sd = mapper.readValue(c.value(), StreamData.class); 
      System.out.println("**** StreamData "+sd); 
      StreamDataWrapper sw = new StreamDataWrapper(sd); 
      System.out.println("**** StreamDataWrapper "+sw); 
      return sw; 
     } 

    }; 
    System.out.println("***** End of create function ******"); 
    return function; 
} 

我打电话这个createFunction()从另一种方法,但问题是,它执行所有语句,但不statements inside call()。这里是我的方法的output。 O/P: -

***** inside create function ****** 
***** End of create function ****** 

它不打印其他输出语句。 以下是我使用

<dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_2.11</artifactId> 
     <version>2.0.1</version> 
     <exclusions> 
      <exclusion> 
       <groupId>com.google.guava</groupId> 
       <artifactId>guava</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
+0

如何以及从哪里使用createFunction()中的'function'? –

+0

'JavaRDD streamDataRdd = rdd.map(createFunction());' – Sat

+0

然后呢?什么是将触发你的函数调用的动作? –

回答

0

有可能会在这里两个问题的依赖性:

  1. call不会打印出消息
  2. call确实叫,但你不不要看正确的日志。

你会看到一些消息,因为具有该函数的管道被实例化(准备执行),但是因为你没有触发任何操作,所以你没有看到从里面没有消息。那将是这种情况1.

至于其他可能的问题,我会说你看错误的日志。你应该看看函数运行的执行者日志。那将是这种情况2.

+0

我的兴趣不在于看到日志,它不执行'call'方法内部的语句,那些语句,应该执行。为了测试这些语句是否被执行,我只是放了一些'System.out.println()'语句。我观察到这些语句没有执行,您是否有任何关于如何使这些语句(在'call'内部)执行的想法? – Sat

相关问题