EX1 . Это с RDD дает сериализацию, как мы ожидаем, с объектом или без него, при этом виновным является valnum, отлично:
object Example {
val r = 1 to 1000000 toList
val rdd = sc.parallelize(r,3)
val num = 1
val rdd2 = rdd.map(_ + num)
rdd2.collect
}
Example
EX2 . Однако использование Dataframe аналогичным образом не позволяет. Почему это выглядит примерно так же? Что мне здесь не хватает?
object Example {
import spark.implicits._
import org.apache.spark.sql.functions._
val n = 1
val df = sc.parallelize(Seq(
("r1", 1, 1),
("r2", 6, 4),
("r3", 4, 1),
("r4", 1, 2)
)).toDF("ID", "a", "b")
df.repartition(3).withColumn("plus1", $"b" + n).show(false)
}
Example
Причины, не совсем понятные для меня в отношении DF, могли бы ожидать аналогичного поведения. Похоже, DS обходят некоторые проблемы, но я вполне могу что-то упустить.
Работа на Databricks дает множество проблем с сериализацией, так что не думайте, что это влияет на вещи, пригодные для тестирования.