Scala 从IndexedSeq[DataFrame]转换为DataFrame?
新手问题, 我正在尝试添加列以存在DataFrame,我正在使用Spark 1.4.1Scala 从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| +----+
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()代码>虽然不是给出明确答案的超级专家。