Spark(Scala)在for循环中执行数据帧

Spark(Scala)在for循环中执行数据帧,scala,apache-spark,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,我使用的是spark 1.6.1版本。我需要在循环中执行数据帧 for ( i <- List ('a','b')){ val i = sqlContext.sql("SELECT i, col1, col2 FROM DF1")} 我希望这个数据帧执行两次I=a和I=b。您的代码几乎是正确的。 除了两件事: i已在for循环中使用,因此不要在val i= 如果要在字符串中使用i的值,请使用字符串插值 因此,您的代码应该如下所示: for (i <- List ('a','b')

我使用的是spark 1.6.1版本。我需要在循环中执行数据帧

for ( i <- List ('a','b')){
 val i = sqlContext.sql("SELECT i, col1, col2 FROM DF1")}

我希望这个数据帧执行两次I=a和I=b。

您的代码几乎是正确的。 除了两件事:

i已在for循环中使用,因此不要在val i= 如果要在字符串中使用i的值,请使用字符串插值 因此,您的代码应该如下所示:

for (i <- List ('a','b')) {
  val df = sqlContext.sql(s"SELECT $i, col1, col2 FROM DF1")
  df.show()
}

实际上,我需要不同的数据帧,在这种情况下2,a和b。假设DF1包含以下数据-col1,col21,a2,B,那么数据帧A应该包含:-A,1,A,A,2,B,数据帧B应该包含:-B,1,A,B,2,B,我必须创建30多个类似类型的数据帧,然后将它们全部合并。太好了!它正在工作。我只做了一点小小的调整**s${'}$I${'}**,以适应字符串的引号。
// All your dataframes
val dfs = Seq('a','b').map { i =>
  sqlContext.sql(s"SELECT $i, col1, col2 FROM DF1")
}

// Then you can reduce your dataframes into one
val unionDF = dfs.reduceLeft((dfa, dfb) => 
  dfa.unionAll(dfb)
)