我是Spark的新手,正在尝试将df分区添加到Postgres 这是我的代码:
//csv_new is a DF with nearly 40 million rows and 6 columns
csv_new.foreachPartition(callback) // there are 19204 partitions
def callback(iterator):
print(iterator)
// the print gives me itertools.chain object
但是在使用以下代码写入数据库时:
iterator.write.option("numPartitions", count).option("batchsize",
1000000).jdbc(url=url, table="table_name", mode=mode,
properties=properties)
出现错误:
* AttributeError:'itertools.chain'对象没有属性,'写'模式已附加并设置了属性
任何人都将介绍如何将df分区写入数据库
答案 0 :(得分:0)
您不需要这样做。
文档按照以下说明进行声明,并且并行发生:
df.write.format("jdbc")
.option("dbtable", "T1")
.option("url", url1)
.option("user", "User")
.option("password", "Passwd")
.option("numPartitions", "5") // to define parallelism
.save()
有一些表演方面需要考虑,但是可以谷歌搜索。
答案 1 :(得分:0)
非常感谢@thebluephantom,如果表已经存在,还需要定义一些附加功能。 以下是我的有效的实现:-
mode = "Append"
url = "jdbc:postgresql://DatabaseIp:port/DB Name"
properties = {"user": "username", "password": "password"}
df.write
.option("numPartitions",partitions here)
.option("batchsize",your batch size default is 1000)
.jdbc(url=url, table="tablename", mode=mode, properties=properties)