我有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时卡住了。
不确定是什么问题。还有更好的方法吗?
此致 Sorabh
答案 0 :(得分:3)
默认情况下,spark-sql会创建200个分区,这意味着当您尝试保存datafrmae时,它将保存在200个镶木地板文件中。您可以使用以下技术减少Dataframe的分区数。
在应用程序级别。设置参数“spark.sql.shuffle.partitions”如下:
sqlContext.setConf(“spark.sql.shuffle.partitions”,“10”)
减少特定DataFrame的分区数量,如下所示:
df.coalesce(10).write.save(...)
此致
Neeraj
答案 1 :(得分:0)
不建议在数据框中使用var
,在数据框中执行某些转换后,应始终使用val
并创建新的Dataframe。
请删除所有var
并替换为val
。
希望这有帮助!