Spark 2.x ve Scala 2.11 ile
Belirli bir sütunun değerlerini Listeye dönüştürmek için 3 olası yol düşünüyorum.
Tüm yaklaşımlar için ortak kod parçacıkları
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder.getOrCreate
import spark.implicits._
val df = Seq(
("first", 2.0),
("test", 1.5),
("choose", 8.0)
).toDF("id", "val")
Yaklaşım 1
df.select("id").collect().map(_(0)).toList
Şimdi ne olacak? Sürücüye veri collect()
topluyoruz ve her kayıttan sıfır elemanı seçiyoruz.
Bu, bunu yapmanın mükemmel bir yolu olamaz. Bir sonraki yaklaşımla bunu geliştirelim.
Yaklaşım 2
df.select("id").rdd.map(r => r(0)).collect.toList
Nasıl daha iyi? İşçiler arasında tek Sürücü yerine harita dönüşüm yükünü dağıttık.
Ben biliyorum rdd.map(r => r(0))
sen değil zarif görünüyor yapar. Öyleyse, bir sonraki yaklaşımda bunu ele alalım.
Yaklaşım 3
df.select("id").map(r => r.getString(0)).collect.toList
Burada DataFrame'i RDD'ye dönüştürmüyoruz. Bak map
o kabul etmeyecektir r => r(0)
(veya _(0)
bağlı DataFrame içinde kodlayıcı konulara önceki yaklaşım olarak). Bu yüzden kullanmayı r => r.getString(0)
bırakın ve Spark'ın sonraki sürümlerinde ele alınacaktır.
Sonuç
Tüm seçenekler aynı çıktıyı veriyor ancak 2 ve 3 etkili, son olarak üçüncü seçenek etkili ve zarif (bence).
Databricks not defteri