s sind verteilte Sammlungen, die nur für Aktionen materialisiert sind. Es ist nicht möglich, truncate Ihre RDD
auf eine feste Größe, und nach wie vor eine RDD
zurück (daher RDD.take(n)
gibt eine Array[T]
, wie collect
)
ich Ihnen ähnlich RDD
s unabhängig von der Eingangsgröße Größe erhalten möchten Sie können Elemente in jeder Ihrer Partitionen abschneiden. Auf diese Weise können Sie die absolute Anzahl der Elemente in der resultierenden besser steuern. Die Größe des resultierenden hängt von der Funkenparallelität ab.
Ein Beispiel aus spark-shell
:
import org.apache.spark.rdd.RDD
val numberOfPartitions = 1000
val millionRdd: RDD[Int] = sc.parallelize(1 to 1000000, numberOfPartitions)
val millionRddTruncated: RDD[Int] = rdd.mapPartitions(_.take(10))
val billionRddTruncated: RDD[Int] = sc.parallelize(1 to 1000000000, numberOfPartitions).mapPartitions(_.take(10))
millionRdd.count // 1000000
millionRddTruncated.count // 10000 = 10 item * 1000 partitions
billionRddTruncated.count // 10000 = 10 item * 1000 partitions
ist Ihre Frage noch offen? Wenn Sie eine akzeptable Antwort haben, vergessen Sie nicht, sie als solche zu markieren. – maasg