运行
val animals = sc.parallelize(List("cat", "dog", "tiger", "lion", "gnu", "crocodile", "ant", "whale", "dolphin", "spider"), 3)
animals.foreachPartition(x => println(x.mkString(", ") + " are animals"))
在spark-shell中返回
lion, gnu, crocodile are animals
cat, dog, tiger are animals
ant, whale, dolphin, spider are animals
但如果我使用Apache Toree Spark内核在Jupyter中运行它,我就得不到输出。我开始Jupyter输出的终端
animals: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[27] at parallelize at <console>:20
16/05/17 09:33:32 [WARN] o.a.t.k.p.v.s.KernelOutputStream - Suppressing empty output: ''
如何让Jupyter使用foreach将动物输出为spark-shell?
答案 0 :(得分:1)
一般来说,你不是。即使你不与Jupyter合作,任何在动作或转换中创建的输出都会出现在某个地方,但除非是本地模式,否则它不会成为你的本地shell。
如果要可靠地检查数据的某些部分,您应该将数据提取到驱动程序并在本地检查。
animals.take(3).foreach(println)
另一方面,我会避免打印。与日志记录不同,它不易配置,并且可能成为代码中的严重瓶颈。