将数据帧添加到Spark中的List

时间:2017-01-31 11:14:51

标签: sql scala list apache-spark dataframe

我正在尝试根据一个数据创建“n”dataframes。我正在检查columndataframe的整数值,并循环sql语句,以便在列中创建“dataframesIntegers

这是我的代码:

val maxvalue = spark.sql("SELECT MAX(column4) as maxval FROM mydata").collect()(0).getInt(0)
for( i <- 0 to maxvalue){
         var query = "SELECT column1,colum2,colum3 FROM mydata WHERE column4 = "+ i
         val newdataframe = spark.sql(query)
         //add dataframe to List

}

我需要创建“n”dataframes,但我不知道如何在循环之前声明List类型并填充for。

现有的dataframe数据类型:

// +------------+------------+------------+------------+
// |     column1|     column2|     column3|     column4|
// +------------+------------+------------+------------+
// |      String|      Double|         Int|         Int|
// +------------+------------+------------+------------+

新的dataframes数据类型:

// +------------+------------+------------+
// |     column1|     column2|     column3|     
// +------------+------------+------------+
// |      String|      Double|         Int|
// +------------+------------+------------+

1 个答案:

答案 0 :(得分:11)

您可以创建一个可变列表并填充它:

val dfs = mutable.ArrayBuffer[DataFrame]()
for( i <- 0 to maxvalue){
  val query = "SELECT column1,colum2,colum3 FROM mydata WHERE column4 = "+ i
  val newdataframe = spark.sql(query)
  dfs += newdataframe
}

但更好的方法(不使用可变数据结构)是将映射整数列表放入DataFrames列表中:

val dfs: Seq[DataFrame] = (0 to maxvalue).map { i => 
  spark.sql("SELECT column1,colum2,colum3 FROM mydata WHERE column4 = " + i)
}