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

10-16 01:26