如何在 Scala 中将 Spark DataFrames 一一添加到 Seq()
Posted
技术标签:
【中文标题】如何在 Scala 中将 Spark DataFrames 一一添加到 Seq()【英文标题】:How to add Spark DataFrames to a Seq() one by one in Scala 【发布时间】: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
【问题讨论】:
【参考方案1】:您不能使用+
附加到列表,您可以这样附加:
x = x :+ temp
但由于你有一个列表,你应该在你的元素前面添加:
x = temp +: x
如果您也将输入打包成一个序列,您可以编写更实用的功能,而不是一个一个添加元素:
val inputs = Seq(....) // create Seq of inputs
val x = inputs.map(i => createSamplesForOneDay(i))
【讨论】:
感谢您的回答。它的第一部分就像一个魅力。对于使代码更实用的第二部分,我想做的是,为每一天创建一个 DataFrame 并将其存储在某个地方。因此,Seq() 中的元素数等于循环运行的天数或次数。以上是关于如何在 Scala 中将 Spark DataFrames 一一添加到 Seq()的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spark Scala 中将 WrappedArray 转换为 List?
Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?
如何在 Spark 2 Scala 中将 Row 转换为 json
如何在 Scala 中将数据帧转换为 Apache Spark 中的数据集?