火花节省了很多时间

spark save taking lot of time

我有 2 个数据框,我想找到所有列都相等的记录,除了 2 (surrogate_key,current)

然后我想用新的 surrogate_key 值保存这些记录。

以下是我的代码:

val seq = csvDataFrame.columns.toSeq
var exceptDF = csvDataFrame.except(csvDataFrame.as('a).join(table.as('b),seq).drop("surrogate_key","current"))
exceptDF.show()

exceptDF = exceptDF.withColumn("surrogate_key", makeSurrogate(csvDataFrame("name"), lit("ecc")))
exceptDF = exceptDF.withColumn("current", lit("Y"))

exceptDF.show()

exceptDF.write.option("driver","org.postgresql.Driver").mode(SaveMode.Append).jdbc(postgreSQLProp.getProperty("url"), tableName, postgreSQLProp)

此代码给出了正确的结果,但在将这些结果写入 postgre 时卡住了。

不确定是什么问题。还有什么更好的方法吗??

此致, 索拉布

不建议对数据框使用 var,您应该始终使用 val 并在对数据框执行一些转换后创建一个新的数据框。

请删除所有 var 并替换为 val

希望对您有所帮助!

默认情况下,spark-sql 创建 200 个分区,这意味着当您尝试保存数据时,它将保存在 200 个镶木地板文件中。您可以使用以下技术减少 Dataframe 的分区数。

  1. 在应用程序级别。设置参数 "spark.sql.shuffle.partitions" 如下:

sqlContext.setConf("spark.sql.shuffle.partitions", "10")

  1. 按如下方式减少特定 DataFrame 的分区数:

df.coalesce(10).write.save(...)