首页 > 解决方案 > 如何在 Scala 中将 Spark DataFrames 一一添加到 Seq()

问题描述

我使用创建了一个空的 Seq()

scala> var x = Seq[DataFrame]()
x: Seq[org.apache.spark.sql.DataFrame] = List()

我有一个调用的函数createSamplesForOneDay(),它返回一个 DataFrame,我想将它添加到这个 Seq()x中。

val temp = createSamplesForOneDay(some_inputs) // this returns a Spark DF
x = x + temp // this throws an error 

我收到以下错误 -

scala> x = x + temp
<console>:59: error: type mismatch;
 found   : org.apache.spark.sql.DataFrame
    (which expands to)  org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
 required: String
       x = x + temp

我想要做的是Seq()使用 for 循环创建一个数据框,最后union它们都使用这样的东西 -

val newDFs = Seq(DF1,DF2,DF3)
newDFs.reduce(_ union _)

如此处所述-scala-Spark:如何在循环中联合所有数据帧

标签: apache-spark

解决方案


您不能使用 追加到列表+,您可以像这样追加:

x = x :+ temp

但是当你有一个列表时,你应该在你的元素之前添加:

x = temp +: x 

如果您也将输入打包成一个序列,您可以编写更实用的函数,而不是一个一个地添加元素:

val inputs = Seq(....) // create Seq of inputs

val x = inputs.map(i => createSamplesForOneDay(i))

推荐阅读