【发布时间】:2021-10-14 00:53:37
【问题描述】:
我正在尝试从 MongoDB 并行获取数据并将所有数据帧、视图名称存储在一个集合中,以便我可以引用它们。
为此,我创建了一个集合,我试图在其中存储数据帧和视图。将元素附加到集合时出现错误。我尝试使用 Vector、List、Seq。但似乎没有什么对我有用。
有没有办法处理这些问题?
var mongoFrames = Nil
for(c <- collections) {
var connectionString = connectionInt.setCollection(c);
var dframe = spark.read.format("com.mongodb.spark.sql.DefaultSource").option("uri", connectionString).load()
var view = dframe.createOrReplaceTempView(c);
var mongoQuery = s"select * from $c where tuid in (${tuidIn.mkString(",")})";
var tup = (c, dframe, view, mongoQuery)
mongoFrames += tup
}
for(v <- mongoFrames) yield spark.sql(v._4).collect() // load data from source into spark
更新
尝试使用 +: 时,出现以下错误
error: value +: is not a member of (String, org.apache.spark.sql.DataFrame,单位,字符串) mongoFrames +: tup
【问题讨论】:
-
this 能满足您的需求吗?
-
scala 集合是不可变的,因此每次添加或添加到它们时都需要重新分配给变量。运算符为
:+或+:。 -
@James 我不明白该链接到底想显示什么。我正在尝试解决此
mongoFrames += tup的问题 -
如果我每次都必须使用新的变量名,我将如何迭代多个集合。循环遍历集合似乎是我唯一的解决方案。但它不工作。
-
我在答案中添加了关于迭代部分的更多解释。但是,如果您需要在此迭代后创建一个新集合,您可以使用
map而不是foreach
标签: scala apache-spark scala-collections