如何存储数据框,在 spark-scala 中查看元组
How to store dataframe, view in tuple in spark-scala
我正在尝试从 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, Unit, String)
mongoFrames +: tup
这应该适合你:
var mongoFrames = List.empty[(String, DataFrame, Unit, String)]
for(c <- collections) {
//...
mongoFrames = mongoFrames:+ tup
}
不要把createOrReplaceTempView的变量添加到元组中,因为方法returns单元没有用。您可以在 SparkSession 中使用它的名称访问该临时视图。
你可以写成:
var mongoFrames: Seq[Tuple3[String, DataFrame,String]] = Seq.empty
和
var tup: Tuple[String, DataFrame, String] = (c, dframe, mongoQuery)
mongoFrames = mongoFrames :+ tup
然后
遍历它
for(v <- mongoFrames) yield spark.sql(v._3).collect()
编辑 1:
在这种情况下,一种更惯用的遍历集合的方法是这样写:
mongoFrames.foreach(spark.sql(_._3).collect())
使用匿名函数。
这是以下简称:
mongoFrames.foreach(mongoFrame => spark.sql(mongoFrame._3).collect())
我正在尝试从 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, Unit, String) mongoFrames +: tup
这应该适合你:
var mongoFrames = List.empty[(String, DataFrame, Unit, String)]
for(c <- collections) {
//...
mongoFrames = mongoFrames:+ tup
}
不要把createOrReplaceTempView的变量添加到元组中,因为方法returns单元没有用。您可以在 SparkSession 中使用它的名称访问该临时视图。
你可以写成:
var mongoFrames: Seq[Tuple3[String, DataFrame,String]] = Seq.empty
和
var tup: Tuple[String, DataFrame, String] = (c, dframe, mongoQuery)
mongoFrames = mongoFrames :+ tup
然后
遍历它
for(v <- mongoFrames) yield spark.sql(v._3).collect()
编辑 1:
在这种情况下,一种更惯用的遍历集合的方法是这样写:
mongoFrames.foreach(spark.sql(_._3).collect())
使用匿名函数。
这是以下简称:
mongoFrames.foreach(mongoFrame => spark.sql(mongoFrame._3).collect())