问题描述
我在Scala中有一个用于Spark的库,其中包含许多功能。 一个示例是以下函数,用于合并具有不同列的两个数据框:
def appendDF(df2: DataFrame): DataFrame = {
val cols1 = df.columns.toSeq
val cols2 = df2.columns.toSeq
def expr(sourceCols: Seq[String],targetCols: Seq[String]): Seq[Column] = {
targetCols.map({
case x if sourceCols.contains(x) => col(x)
case y => lit(null).as(y)
})
}
// both df's need to pass through `expr` to guarantee the same order,as needed for correct unions.
df.select(expr(cols1,cols1): _*).union(df2.select(expr(cols2,cols1): _*))
}
我想将此功能(以及更多功能)用于Dataset[CleanRow]
,而不是DataFrames。 CleanRow
是一个简单的类,用于定义列的名称和类型。
我有根据的猜测是使用.toDF()
方法将数据集转换为数据帧。但是,我想知道是否还有更好的方法。
据我了解,Dataset和Dataframe之间应该没有太多区别,因为Dataset只是Dataframe [Row]。另外,我认为从Spark 2.x起,用于DF和DS的API已统一,因此我认为我可以互换使用它们,但这不是事实。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)