在yarn部署模式下,在控制台中打印map函数的值。

9 浏览
0 Comments

在yarn部署模式下,在控制台中打印map函数的值。

我开发了一个流媒体应用程序,该应用程序具有以下map函数:

probeFileLines.map(x => { println(x._2.toString().take(1)); x._2.toString()})

在我的驱动程序控制台上,我需要打印x._2。所以我使用了take方法,但是在控制台上没有显示任何内容。我在yarn -client模式下运行我的应用程序。有一些线程解决了如何在RDD中实现此功能的问题,但是我的问题有所不同。

0
0 Comments

在使用YARN部署模式时,当我们在map函数中打印值到控制台时,可能会遇到问题。问题的原因是在YARN部署模式下,map函数的执行是在集群的多个节点上并行进行的,因此打印的值不会直接显示在控制台上。

为了解决这个问题,我们可以使用RDD的collect方法,将RDD的所有元素作为一个数组收集到驱动程序中。一旦我们使用collect方法获取了数组,我们可以通过迭代数组来打印其中的元素。

下面是解决该问题的代码示例:

val rdd = sc.parallelize(Seq(1, 2, 3, 4, 5))
val collected = rdd.collect()
for (elem <- collected) {
  println(elem)
}

在上面的示例中,首先我们创建了一个RDD,并使用parallelize方法将一组数字转换为RDD。然后我们使用collect方法将RDD的所有元素收集到驱动程序中,并将结果保存在collected变量中。最后,我们通过迭代collected数组来打印其中的元素。

通过以上方法,我们可以在YARN部署模式下打印map函数中的值到控制台上。

0
0 Comments

问题的原因是在使用Spark Streaming的map函数打印值时,在yarn部署模式下出现了问题。

解决方法是使用Spark Streaming的print()函数来替代map函数打印值的操作。具体代码如下:

val numberToPrint = 10;
probeFileLines
  .map(x => {
    x._2.toString()
  })
  .print(numberToPrint);

0
0 Comments

问题:在yarn部署模式下,在map函数中在控制台上打印值的问题

原因:在yarn部署模式下,无法直接在map函数中使用println函数来打印值。

解决方法:将要打印的值收集到一个新的RDD中,然后使用foreach函数在控制台上打印这些值。

代码示例:

val inputRDDV2 = sc.parallelize(List(1,2,3,4))
val inputRDDV2Map = inputRDDV2.map(num=>num*2).collect()
println("Applying map() to new RDD: ========================> ")
inputRDDV2Map.foreach(println)

以上代码中,首先使用parallelize函数将列表[1,2,3,4]转换为RDD对象inputRDDV2。然后使用map函数将每个元素乘以2,并将结果存储到新的RDD对象inputRDDV2Map中。最后,使用foreach函数遍历inputRDDV2Map,并使用println函数打印每个元素的值到控制台上。

这样就可以在yarn部署模式下,在控制台上打印map函数的结果值了。

0