【问题标题】:How to add Spark DataFrames to a Seq() one by one in Scala如何在 Scala 中将 Spark DataFrames 一一添加到 Seq()
【发布时间】:2019-07-02 07:27:57
【问题描述】:

我使用

创建了一个空的 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

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

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

这里提到 - scala - Spark : How to union all dataframe in loop

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

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

    x = x :+ temp
    

    但由于你有一个列表,你应该在你的元素前面添加:

    x = temp +: x 
    

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

    val inputs = Seq(....) // create Seq of inputs
    
    val x = inputs.map(i => createSamplesForOneDay(i))
    

    【讨论】:

    • 感谢您的回答。它的第一部分就像一个魅力。对于使代码更实用的第二部分,我想做的是,为每一天创建一个 DataFrame 并将其存储在某个地方。因此,Seq() 中的元素数等于循环运行的天数或次数。
    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多