scala - 在 Scala 中追加/合并多个数据帧

标签 scala dataframe apache-spark apache-spark-sql

我有 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/

相关文章:

apache-spark - 使用 AWS Glue 作业在 Redshift 中导入数据时添加时间戳列

scala - 为什么不直接设置值

java - 继承设计模式的不变性

scala - 隐式和非隐式调用函数

python - Pandas 版本 0.22.0 - drop_duplicates() 得到意外的关键字参数 'keep'

scala - 使用一种热编码和向量汇编器与向量索引器来处理分类特征

scala - 如何进行与硬件无关的并行编程?

python - 如何将数据框的列标题复制到每个行值?

python - Pandas 数据框中的可变移位

apache-spark - Kryo序列化器如何在Spark中分配缓冲区