これは私にとってかなり奇妙です。私はScalaのmap
とforeach
の違いと両方の使用例に精通していますが、私は他の何かを理解していないかもしれません。私はスパークで遊んでいたときに初めてこれに遭遇しました。これはおそらく、これがRDDを使用しているときにしか現れません。Scalaは外見上いくつかのコードを無視しています
マップへの呼び出しが一見無視される以下のコードがあります。 私はScala 2.11.1を使用しています。以下のコードを実行するための私の依存関係です。あなたは何をstdoutに印刷されていないことを確認することができ、これを実行している場合は
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0",
"org.apache.spark" %% "spark-sql" % "2.1.0"
)
以下は、Scalaのコンソールに
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd.RDD
import org.apache.spark.RangePartitioner
val conf: SparkConf = new SparkConf().setMaster("local").setAppName("Test")
val sc: SparkContext = new SparkContext(conf)
val rdd: RDD[Tuple2[String, String]] = sc.parallelize(List(
("I", "India"),
("U", "USA"),
("W", "West")))
val rp = new RangePartitioner(3, rdd)
val parts = rdd.partitionBy(rp).cache()
parts.mapPartitionsWithIndex((x,y) => { y.map(println); y }).collect()
を貼り付けることができます。ただし、コードの最後の行をparts.mapPartitionsWithIndex((x,y) => { y.map(println) }).collect()
に変更した場合、またはそれでもparts.mapPartitionsWithIndex((x,y) => { y.foreach(println); y }).collect()
に変更した場合は、それが印刷されます。
これは、私がローカルモードになってから出力されないstdoutについての質問とは異なると思います。これはRDDの評価に問題ではなく、stdoutです。
はmapPartitionsWithIndex
に渡された関数の種類はあなたの例ではそう
(Int, Iterator[T]) ⇒ Iterator[U]
ある
正確には印刷されません。 –
インポートの完全なコード例では、何もstdoutに出力されません。おそらく、セットアップの問題ですが、すべての例でstdoutで何かを見ることができるのであれば。 – mschuett
これはローカルで実行していますか?そしてplzは正確なコード差で実行されない場合を指定します –