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