我有 python 背景,尝试将函数转换为 scala。
在这个虚拟示例中,我需要将多个(未知数量)数据帧合并在一起。
%python
list_of_dfs = [
spark.createDataFrame(
[('A', 'C'),
('B', 'E')
], ['dummy1','dummy2']),
spark.createDataFrame(
[('F', 'G'),
('H', 'I')
], ['dummy1','dummy2'])]
for i, df in enumerate(list_of_dfs):
if i == 0:
union_df = df
else:
union_df = union_df.unionAll(df)
union_df.display()
按照我想要的方式工作。 “union_df = union_df.unionAll(df)”正是我在 scala 中重现时遇到的问题。
%scala
... outer loop creates each iterations dataframe
if(i==0) {
val union_df=df
} else{
val union_df=union_df.union(df)
}
我收到此“错误:递归值 union_df 需要类型”。我在将文档翻译成我的解决方案时遇到了麻烦,因为类型是数据框。显然我需要真正学习一些关于 scala 的知识,但这是我现在想要跨越的桥梁。感谢任何帮助。
最佳答案
您不需要手动管理循环来遍历 Scala 中的集合。由于您尝试将多个值转换为一个值,因此我们可以使用 reduce
方法:
val dfs: Iterable[DataFrame] = ???
val union_df = dfs.reduce(_ union _)
关于scala - 在 Scala 中追加/合并多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69371395/