【发布时间】:2018-01-10 18:08:51
【问题描述】:
我有 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 时卡住了。
不确定是什么问题。还有什么更好的方法吗??
问候, 索拉布
【问题讨论】:
-
写入 postgre 之前的 show() 也可以正确打印数据帧,但是写入需要太多时间。
-
show不会对整个数据执行转换,它只需要显示多少数据(默认为 20)。您需要在写入 postgres 之前执行缓存 + 操作,然后您可以测量写入 postgres 实际花费的时间。此外,“大量时间”是一个非常广泛的描述,您拥有多少数据以及实际花费了多少时间...... -
您好 Eliasah,我使用了 cache() + count(),仅 3 行 10 列大约需要 1/2 小时,而且延迟不是由于在 postgre 中写入。添加 count() 后,它的 count() 现在需要时间。
-
这不包括节省时间的事实。
-
那么您的整个管道需要进行分析...对于您提供的当前信息和代码,我们无法为您提供太多帮助
标签: apache-spark apache-spark-sql apache-spark-2.0