【发布时间】:2018-08-09 20:49:22
【问题描述】:
我想知道为什么在 Spark 中我们不允许广播 RDD 但我们可以广播 DataFrame?
val df = Seq(("t","t"),("t","f"),("f","t"),("f","f")).toDF("x1", "x2")
val rdd = df.rdd
val b_df = spark.sparkContext.broadcast(df) //you can do this!
val b_rdd = spark.sparkContext.broadcast(rdd) //IllegalArgumentException!
广播的DataFrame 有什么用? I know that we cannot operate on a RDD within another RDD transformation,但也禁止尝试在 RDD 转换中对 DataFrame 进行操作。
rdd.map(r => b_df.value.count).collect //SparkException
我正在尝试寻找方法来利用 Spark 的功能,以应对我必须通过涉及调用其他并行化集合的转换/动作的转换来对并行化集合进行操作的情况。
【问题讨论】:
-
df.select("id").rdd.map(r => r(0)).collect.toList 这种类型的事情是可能的 - 只是为了好衡量。
标签: apache-spark apache-spark-sql rdd