scala - 从scala中同一表的列循环数据框

标签 scala performance apache-spark hadoop

我有DataFrame,它将包含带有数据的表名。我需要使用表列名称循环DataFrame。首先有没有更好的方法来进行收集?

val tablename:Array[String] = df1.select("msgname").distinct().rdd.map(row=>row.getString(0).trim).collect

tablename.foreach{table =>
  //print(table)
  //val columns:Array[String] = df1.filter(s"msgname = '$table'").select("columns").distinct().rdd.map(row=>row.toString()).collect
  df1.filter(s"msgname = '$table'").select("record_data").write.saveAsTable(s"$table")
    //.toDF(columns:_*).show()
    //.toDF(columns:_*).show()
}

最佳答案

2个提高性能的想法:缓存df1和/或触发并行 Spark 作业,例如使用并行集合,如下所示:

df1.cache()    
val tablename:Array[String] = df1.select(trim("msgname")).distinct().as[String].collect

tablename
.par // enable parallel execution
.foreach{table =>
     df1.filter(s"msgname ='$table'").select("record_data").write.saveAsTable(s"$table")
}

关于scala - 从scala中同一表的列循环数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58091504/

相关文章:

python - (python 矩阵)可视化 mllib 评估

sql - 修改 SQL 触发器,使其在插入的表包含多行时起作用

scala - 如何在使用 actors 和 sbt 更改代码后重新加载 scala 应用程序

scala - 函数式编程 : is foldLeft is the parent method of all functional methods such as foldRight, 映射、过滤器

java - 无法在我的集群上启动 Spark

java - 追加字符串 - 性能问题 - Java 6

c++ - C++ 程序真的比类似的 C 程序慢吗?

apache-spark - YARN 如何在集群模式下了解 Apache Spark 中的数据位置

apache-spark - Hadoop 数据摄取

scala - 静态特征混合和动态特征混合有什么区别