我有一个包含值的rdd,每个值都将传递给函数generate_df(num:Int)
以创建数据帧。因此,最后我们将有一个存储在列表缓冲区中的数据帧列表,如var df_list_example = new ListBuffer[org.apache.spark.sql.DataFrame]()
。
首先,我将使用列表而不是RDD来显示代码和结果:
var df_list = new ListBuffer[org.apache.spark.sql.DataFrame]()
for (i <- list_values) //list_values contains values
{
df_list += generate_df(i)
}
结果:
df_list: scala.collection.mutable.ListBuffer [org.apache.spark.sql.DataFrame] = ListBuffer([value:int],[value:int],[value:int])
但是,当我使用对我的用例非常重要的RDD时,我遇到了问题:
var df_rdd_list = new ListBuffer[org.apache.spark.sql.DataFrame]()
//rdd_values contains values
rdd_values.map( i => df_rdd_list += generate_df(i) )
结果:
df_rdd_list: scala.collection.mutable.ListBuffer [org.apache.spark.sql.DataFrame] = ListBuffer()
基本上,列表缓冲区保持为空,无法存储数据帧,这与我使用值列表而不是值的rdd时不同。使用rdd进行映射对于我的原始用例至关重要。