Scala 从IndexedSeq[DataFrame]转换为DataFrame?

Scala 从IndexedSeq[DataFrame]转换为DataFrame?,scala,apache-spark-sql,Scala,Apache Spark Sql,新手问题, 我正在尝试添加列以存在DataFrame,我正在使用Spark 1.4.1 import sqlContext.implicits._ case class Test(rule: Int) val test = sc.parallelize((1 to 2).map(i => Test(i-i))).toDF test.registerTempTable("test") test.show +----+ |rule| +----+ | 0| | 0| +----+

新手问题, 我正在尝试添加列以存在DataFrame,我正在使用Spark 1.4.1

import sqlContext.implicits._
case class Test(rule: Int)

val test = sc.parallelize((1 to 2).map(i => Test(i-i))).toDF
test.registerTempTable("test")
test.show

+----+
|rule|
+----+
|   0|
|   0|
+----+
然后-添加列,一列-确定

import org.apache.spark.sql.functions.lit
val t1 = test.withColumn("1",lit(0) )
t1.show

+----+-+
|rule|1|
+----+-+
|   0|0|
|   0|0|
+----+-+
尝试添加多个列时出现问题:

val t1 = (1 to 5).map( i => test.withColumn(i,lit(i) ))
t1.show()

error: value show is not a member of scala.collection.immutable.IndexedSeq[org.apache.spark.sql.DataFrame]
您需要一个reduce过程,因此可以使用foldLeft和test data frame作为初始参数,而不是使用map:

val t1 = (1 to 5).foldLeft(test){ case(df, i) => df.withColumn(i.toString, lit(i))}

t1.show
+----+---+---+---+---+---+
|rule|  1|  2|  3|  4|  5|
+----+---+---+---+---+---+
|   0|  1|  2|  3|  4|  5|
|   0|  1|  2|  3|  4|  5|
+----+---+---+---+---+---+

杰出的感谢
df
的角色是什么?我们是否创建五倍新的
df
以添加到
test
df
指的是前一阶段生成的数据帧。我不认为我们创建了五次数据帧。因为它与
test.withColumn().withColumn()…
val df1=test.withColumn()相同;val df2=df1.withColumn()虽然不是给出明确答案的超级专家。