【问题标题】:Adding dataframes to List in Spark将数据框添加到 Spark 中的列表
【发布时间】:2017-06-16 19:19:48
【问题描述】:

我正在尝试根据一个的数据创建“n”dataframes。我正在检查dataframecolumn 的整数值,并循环用于在列中创建“n”dataframes 的sql 语句与Integers 一样多。

这是我的代码:

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|
// +------------+------------+------------+

【问题讨论】:

  • 请添加示例数据,目前您的代码无法重现。
  • 我已经添加了数据框数据类型

标签: sql scala list apache-spark dataframe


【解决方案1】:

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

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)
}

【讨论】:

  • 它就像一个魅力!非常感谢。我使用了第二种方法。更好的一个。 ;)
  • mutable 不适用于第一个选项的 databricks 笔记本。知道为什么吗?
  • 不要问我为什么,但突然间第二个选项起作用了。
猜你喜欢
  • 2016-05-19
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多